为什么我的C语言行数统计不起作用?

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

这个很好地解决了。我没有改变文本文件的任何内容,但它仍然打印出130,000,尽管文件只有10,000行。 我在我的主程序中唯一写的是:

linecount = getLinecount("...");

我很好奇错误出在哪里。此外,有没有更好的获取行数的方法?

通过使用调试器跟踪,您会立即发现这个 ; - alk
学习你的编译器并使用完整警告进行编译。例如,gcc 的 -Wextra 选项可以捕获并输出:warning: empty body in an if-statement - Eugen Constantin Dinca
7个回答

10

在您的if语句后面有一个分号;。然后,该代码块将始终执行:

{
    count++;
}

1
我怎么会忽略那个,它是怎么到那里的?非常感谢! - Steffen

4

变更

if (ch == '\n'); 

to:

if (ch == '\n')

3

如果 if 后面有分号:请将其删除。如果有分号,代码的意思等同于:

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

意思是循环的每一次迭代(文件中的每一个字符),count都会增加。

1

if后面,你需要删除尾随的分号。

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

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

1

除了分号(;)需要从该行中删除之外,一切都很好。

if (ch == '\n')

0
除了其他人提到的“;”问题之外,另一种替代方案可以在this帖子中找到,因为他解释了他做事情的方式。

0

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

PHP Echo Line Breaks复制:

  • '\n'是Linux / Unix换行符
  • '\r'是经典的Mac换行符[OS X使用上述Unix \n]
  • '\r' + '\n'是Windows换行符

他以文本模式打开文件,因此换行符“\n”不受平台影响。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接