我是新手并拥有一个C-Linux程序,它读取了许多可变行:
12 34 56 78
3 4 7 900
...
%d %d %d %d
...
1 2 3 4
到目前为止我写的函数是这样的:
void Import(const char* path_of_file)
{
FILE *cfile = fopen(path_of_file, "r");
int lines = 0;
//I copied it from another question
while (EOF != (fscanf(cfile,"%*[^/n]"), fscanf(cfile, "%*c"))) ++lines;
fclose(cfile);
cfile = fopen(path_of_file, "w");
...
for( i=0; i<n; i++)
{
...
fscanf(cfile, "%d %d %d %d", &a, &b, &c, &d);
...
}
...
//Of course it will return something, but it shouldn't matter here
fclose(cfile);
}
但可能是因为文本文件是在Windows或某些东西中创建的,它并不总是以换行符结束,所以我的程序经常会错过最后一行。
是否有自动在文件末尾附加换行符,如果它不存在?或者更好的是,有没有办法在没有换行符的情况下阅读最后一行?基于上述功能的示例功能将非常好。
答案 0 :(得分:0)
谢谢Pavel,我从未在那篇文章中读过其他答案,我的错只看了接受的答案。阅读完所有这些帖子后,我选择使用此代码来计算行数,它可以避免上述问题:
int n = 0;
int pc = EOF;
int c;
while ((c = getc(cfile)) != EOF) {
if (c == '\n')
++n;
pc = c;
}
if (pc != EOF && pc != '\n')
++n;
抱歉我的愚蠢。