因此,我正在编写一个小实用程序来帮助我更有效地读取一些文件,因此该程序会打开一个文件,然后打印从第 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
...
正如您所看到的,由于某种原因,它总是无缘无故地在开头有这个空行。请帮我解决这个问题。
最佳答案
两个错误:
首先,fgetc()
返回一个 int
,而不是一个 char
,因为它需要返回每个可能的字符值以及附加值 EOF。该值通常为 -1,但由于您将返回值截断为 char
,程序也会在遇到字符 0xFF 时停止(对于文本文件它可能永远不会这样做,因此这个错误隐藏得很好)。
其次,您在看到 '\n'
时增加行号,然后一次打印一个字符。当到达第 12 行时,将在第 11 行末尾打印 '\n'
。在打印后将增量向下移动一行。
关于c - 从 C 文件中打印特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46854012/