c 计算文件中的行数避免 EOF
c count lines in a file avoid EOF
在众多资源中,您可以找到一个简单的 C 程序来计算文件中的行数。我正在使用其中之一。
#include <stdio.h>
int main(int argc, char* argv[]) {
FILE *file;
long count_lines = 0;
char chr;
file = fopen(argv[1], "r");
while ((chr = fgetc(file)) != EOF)
{
count_lines += chr == '\n';
}
fclose(file); //close file.
printf("%ld %s\n", count_lines, argv[1]);
return 0;
}
但是,它无法统计数量。 Top2Billion-probable-v2.txt 中的行数。它停在线上
<F0><EE><E7><E0><EB><E8><FF>
并输出
1367044 Top2Billion-probable-v2.txt
什么时候应该输出 1973218846
行。 wc -l
以某种方式避免了这个问题(而且速度快得惊人)。
我应该放弃计算文件行数的正确 C 实现,还是应该像 wc
那样 space 特殊字符?
fgetc()
returns 读取为无符号字符的字符 转换为 int 或 EOF。因此,将 chr
声明为 int
而不是 char
应该可以解决问题。
在众多资源中,您可以找到一个简单的 C 程序来计算文件中的行数。我正在使用其中之一。
#include <stdio.h>
int main(int argc, char* argv[]) {
FILE *file;
long count_lines = 0;
char chr;
file = fopen(argv[1], "r");
while ((chr = fgetc(file)) != EOF)
{
count_lines += chr == '\n';
}
fclose(file); //close file.
printf("%ld %s\n", count_lines, argv[1]);
return 0;
}
但是,它无法统计数量。 Top2Billion-probable-v2.txt 中的行数。它停在线上
<F0><EE><E7><E0><EB><E8><FF>
并输出
1367044 Top2Billion-probable-v2.txt
什么时候应该输出 1973218846
行。 wc -l
以某种方式避免了这个问题(而且速度快得惊人)。
我应该放弃计算文件行数的正确 C 实现,还是应该像 wc
那样 space 特殊字符?
fgetc()
returns 读取为无符号字符的字符 转换为 int 或 EOF。因此,将 chr
声明为 int
而不是 char
应该可以解决问题。