如何在文件末尾自动附加换行符

时间:2014-05-21 15:52:59

标签: c linux gcc scanf

我是新手并拥有一个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或某些东西中创建的,它并不总是以换行符结束,所以我的程序经常会错过最后一行。

是否有自动在文件末尾附加换行符,如果它不存在?或者更好的是,有没有办法在没有换行符的情况下阅读最后一行?基于上述功能的示例功能将非常好。

1 个答案:

答案 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;

抱歉我的愚蠢。