从C中的文件打印特定行

时间:2017-10-20 17:07:17

标签: c windows file

所以,我正在编写一个小工具来帮助我更有效地阅读一些文件,因此程序打开一个文件然后打印从第12行到结尾的所有内容。我正在使用Windows。到目前为止,这是我的代码:

FILE* file = fopen(argv[1], "rb");
    char chr;
    long long ln = 1;
    if (file) {
        while ((chr = fgetc(file)) != -1) {
            if (chr == '\n') ln += 1;
            if (ln >= 12)
                printf("%c", chr);
        }
        fclose(file);
        return 0;
    }
    else {
        return 1;
    }

但每次我运行程序时,它都会给我这样的东西:

X:\example>readln document.txt

line 12
line 13
line 14
...

正如您所看到的那样,它始终无缘无故地在开头就有这条空行。请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

两个错误:

首先,fgetc()返回int,而不是char,因为它需要返回每个可能的字符值以及额外的值EOF。这个值通常为-1,但由于你将返回值切换为char,程序也会在遇到字符0xFF时停止(它可能永远不会对文本文件进行处理,所以这个bug就是公隐藏)。

其次,您在看到'\n'时增加行号,然后一次打印一个字符。到达第12行时,将在第11行末尾打印'\n'。在打印后将增量向下移动一行。