【问题标题】:Counting number of lines in the file in C用C计算文件中的行数
【发布时间】:2015-04-20 15:16:38
【问题描述】:

我正在编写一个函数来读取给定行中的行数。某些文本文件可能不以换行符结尾。

int line_count(const char *filename)
{
   int ch = 0;
   int count = 0;    
   FILE *fileHandle;

   if ((fileHandle = fopen(filename, "r")) == NULL) {
      return -1;
   }

   do {
      ch = fgetc(fileHandle);
      if ( ch == '\n')
         count++;
   } while (ch != EOF);

   fclose(fileHandle);

   return count;
}

现在该函数无法正确计算行数,但我无法弄清楚问题出在哪里。非常感谢您的帮助。

【问题讨论】:

  • " 没有正确计算行数" - 详细说明....
  • 当有1行文件时,函数返回0。
  • 如果只是在没有尾随换行符的情况下您偏离了 1,您将需要跟踪前一个字符是什么(例如 EOF 之前的字符),如果是则加 1不是换行符。

标签: c file-io fgetc


【解决方案1】:

这是另一个选项(除了跟踪 EOF 之前的最后一个字符)。

int ch;
int charsOnCurrentLine = 0;

while ((ch = fgetc(fileHandle)) != EOF) {
    if (ch == '\n') {
        count++;
        charsOnCurrentLine = 0;
    } else {
        charsOnCurrentLine++;
    }
}
if (charsOnCurrentLine > 0) {
    count++;
}

【讨论】:

    【解决方案2】:

    fgets() 读取到换行符或缓冲区已满

    char buf[200];
    while(fgets(buf,sizeof(buf),fileHandle) != NULL)
    {
      count++;
    }
    

    fgetc() 在这里是一个问题,因为您首先遇到EOF 并退出您的do while 循环并且永远不会遇到\n 字符,因此文件中最后一行的计数保持不变。如果它碰巧在那里是文件中的一行,count 将是 0

    【讨论】:

    • 如果有两行而不是一行怎么办?
    • @KarolyHorvath 我们再次看到同样的问题!!这就是我建议 fgets() 的原因
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多