Chinaunix首页 | 论坛 | 博客
  • 博客访问: 18672961
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: C/C++

2008-03-20 10:01:13

#include
#include
#include
#include
int main(int argc, char *argv[])
{
    FILE *fd;
    int i = 0, j = 0, y = 0, k = 0;
    char buf;
/*...................为了获得文件字符数和行数................................................*/
    fd = fopen(argv[1], "r");               //打开一个文件
    if (fd == NULL) {                    //判断打开文件的返回值
        printf("open file failed\n");
        exit(0);
    } else {
        printf("open file ok!现在开始读文件\n");
        while (1) {                    //在这里实现死循环,
            if ((fread(&buf, 1, 1, fd)) == 0) {        //每一次从文件中读取一个字节放到内存中,和判断返回值
                if (!feof(fd))                //判断是否读文件读到最后,如果不是在最后就明在这里读文件出错
                    printf("read failed\n");        //然后打印出来
                goto fin;                //确认是读文件到最后,然后跳到fin去执行
            } else {                    //读文件成功
                i++;                    //计算出i的值然后可以知道一个文件中有多少字节,就是i的值啦
                if (buf == 0x0a)            //判断是否读到了换行符,0a是十六进,表示换行
                    j++;                //每换一次行给j加一次,从而可知一共有多少行
            }
        }
    }
/*....................为了读取文件中的内容..................................*/
fin:                            //实现goto语句
    fclose(fd);                        //关闭上面打开的文件
    char x[i + 1];                    //为文件动态地分配内存
    memset(x, 0, i + 1);                //先清空
    fd = fopen(argv[1], "r");               
    memset(x, 0, i + 1);
    fd = fopen(argv[1], "r");
    if (fd == NULL) {
        printf("open file failed\n");
        exit(0);
    } else {
        printf("open file ok!现在开始读文件\n");
        while (1) {
            if ((fread(&buf, 1, 1, fd)) == 0) {
                if (!feof(fd))
                    printf("read failed\n");
                goto finish;
            } else {
                x[y++] = buf;                //把所有字符读到x数组中
            }
        }
    }
finish:
    printf("读文件结束!\n");
    printf("共有%d行,%d个字符\n", j, i);            //打印出行数和字符总数
    printf("字符内容是:%s", x);                //打印文章中的内容

/*...........................打印出每一行的行号........................*/
    y = -1;               
    for (k = 0; k < j; k++) {
        printf("\n第%d行是:\n", k + 1);
        for (y = y + 1; y < i; y++) {
            if (x[y] == 0x0a)                //当碰到换行符时结束,跳到上面去打印出行号
                break;
            printf("%c", x[y]);                //打印出每一行的字符
        }
    }
    fclose(fd);
printf("\n");
    return 0;
}
阅读(405) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~