为什么会产生无限循环?

时间:2011-10-16 00:26:02

标签: c loops file-io infinite-loop

这是我的C程序的一部分:

FILE *fin_length;
int c;
int countNewLines = 0;

fin_length = fopen( argv[1], "r" );

while( ( c == fgetc( fin_length ) ) != EOF ) {

    if( c == 10 ) countNewLines++;
}

fclose( fin_length );

我使用命令行参数./a.out myMessage.dat运行程序。 myMessage.dat长5行,每行只包含一个短句。因此,我希望循环找到带有if( c == 10 )的这5行,并在每次找到回车时添加一行countNewLines

为什么我在这里得到无限循环?

3 个答案:

答案 0 :(得分:5)

while( ( c == fgetc( fin_length ) ) != EOF ) {

你有太多的等号。这应该是

while( ( c = fgetc( fin_length ) ) != EOF ) {

当您使用==时,最终会进行两次比较。第一个是cfgetc()的返回值之间的比较。

第二次比较将结果(truefalse)与EOF进行比较。我没有查找EOF的值,但肯定不是01 - 这意味着第二次比较永远不会返回false。

答案 1 :(得分:4)

因为你曾经使用过==,所以你需要这个:

while ((c = fgetc(fin_length)) != EOF) {

你从==得到一个布尔值,然后将其与EOF进行比较,它永远不会相等,所以你的循环是无限的。

答案 2 :(得分:2)

因为==(相等)与=(赋值)不同。

快乐的编码。