所以,我正在编写一个小工具来帮助我更有效地阅读一些文件,因此程序打开一个文件然后打印从第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
...
正如您所看到的那样,它始终无缘无故地在开头就有这条空行。请帮我解决这个问题。
答案 0 :(得分:1)
两个错误:
首先,fgetc()
返回int
,而不是char
,因为它需要返回每个可能的字符值以及额外的值EOF。这个值通常为-1,但由于你将返回值切换为char
,程序也会在遇到字符0xFF时停止(它可能永远不会对文本文件进行处理,所以这个bug就是公隐藏)。
其次,您在看到'\n'
时增加行号,然后一次打印一个字符。到达第12行时,将在第11行末尾打印'\n'
。在打印后将增量向下移动一行。