4

我正在尝试读取一个文本文件,但在此之前我想知道我要读取多少个元素。所以我需要计算文本文件的行数。到目前为止,我有这个:

int getLinecount (char *file) 
{
    int ch, count = 0;
    FILE *fp = fopen(file, "r");
    if(fp == NULL)
    {
        return -1;
    }
    while((ch = fgetc(fp)) != EOF)
    {
        if (ch == '\n'); 
        {
            count++;
        }
    }
    fclose(fp);
    return count;
}

这工作得很好。我没有对文本文件进行任何更改,尽管该文件只有 10,000 行,但它仍然打印 130,000。我在正文中唯一写的是:

linecount = getLinecount("...");

我真的很好奇错误在哪里。另外,是否有更好的选择来获取行数?

4

7 回答 7

10

;您的语句后面有一个分号if。然后,块总是被执行:

{
    count++;
}
于 2012-11-08T15:01:18.383 回答
4

改变

if (ch == '\n'); 

到:

if (ch == '\n')
于 2012-11-08T15:03:02.373 回答
3

:后面的分号if将其删除。使用尾随分号,代码等效于:

if (ch == '\n') {}
count++;

这意味着count对于循环的每次迭代(char文件中的每个)都会递增。

于 2012-11-08T15:01:25.807 回答
1

你有尾随分号要删除if

对于读取文件,最好使用以下代码:

while((fgets(blahblahblah)) != NULL) {
  counter++;
}
于 2012-11-08T15:02:54.713 回答
1

一切都很好,除了分号 ( ;),应该从行中删除

if (ch == '\n')
于 2012-11-08T15:58:50.613 回答
0

除了;其他人提到的问题,可以在这篇文章中找到一个替代解决方案,因为他解释了为什么他会以他的方式做事。

于 2012-11-08T15:04:49.953 回答
0

您可能需要考虑用于创建和查看此文件的操作系统。

从PHP Echo Line Breaks复制:

  • '\n' 是 linux/unix 换行符
  • '\r' 是一个经典的 mac 换行符 [OS X 使用上面的 unix \n]
  • '\r'+'\n' 是windows换行符
于 2012-11-08T15:06:27.067 回答