为什么C中的linecount没有工作?

时间:2012-11-08 14:59:21

标签: c line-count

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

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;
}

这很好用。我没有对文本文件做任何改变,但仍打印130,000,尽管文件只有10,000行。 我在我的主要内容中唯一写的是:

linecount = getLinecount("...");

我真的很好奇错误在哪里。此外,还有更好的选择获得行数吗?

7 个答案:

答案 0 :(得分:10)

;声明后,您有一个尾随的分号if。然后,始终执行该块:

{
    count++;
}

答案 1 :(得分:4)

更改

if (ch == '\n'); 

为:

if (ch == '\n')

答案 2 :(得分:3)

if后跟踪分号:删除它。使用尾部分号代码相当于:

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

意味着count在循环的每次迭代中递增(文件中每char个。)

答案 3 :(得分:1)

if

之后,您要删除分号

并且为了阅读文件,更好地使用此代码 :

while((fgets(blahblahblah)) != NULL) {
  counter++;
}

答案 4 :(得分:1)

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

if (ch == '\n')

答案 5 :(得分:0)

除了其他人提到的;问题之外,还可以在this帖子中找到替代解决方案,因为他解释了为什么他按照他的方式做事。

答案 6 :(得分:0)

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

PHP Echo Line Breaks复制:

  • '\ n'是linux / unix换行符
  • '\ r'是一个经典的mac换行符[OS X使用上面的unix \ n]
  • '\ r'+'\ n'是一个Windows换行符