我希望能够计算ASCII文本文件中的行数。我认为最好的方法是通过计算文件中的换行符来实现:
for (int c = fgetc(fp); c != EOF; c = fgetc(fp)) { /* Count word line endings. */
if (c == '\n') ++lines;
}
然而,我不确定这是否适用于所有的 MS Windows 和 Linux 上的最后一行。如果我的文本文件以以下方式结束,没有明确的换行符,那么是否仍有编码存在,或者在 for 循环之后是否应该再添加额外的 ++lines;
?
cat
dog
那么如果文件末尾确实有一个显式的换行符怎么办?还是说我只需要通过追踪之前读取的值来测试这种情况?
EOF
会覆盖上次读取的值,所以你需要将其保存在其他地方。一个只包含单个\n
的文件是否包含一行还是两行? - Jongwarefgets
可能会更快一些。但是,如果您的行长度超过了缓冲区大小,仍然需要扫描缓冲区以查找 '\n',而处理最后一行会更加复杂。保持简单。 - chqrlieLENGTH+1
很可疑。应将words[0]
初始化为'\n'
,以避免对空文件计数1。最严重的问题是:超过LENGTH的行将被拆分并多次计数。简单的getc()
循环更可靠,可能同样快速。 - chqrlie