为什么会产生无限循环?

Mxy*_*xyk 2 c file-io loops 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 );
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*ark 5

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

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

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

使用时==,最终会进行两次比较.第一个是c和之间的比较和返回值fgetc().

第二个比较将结果(或者是true或者false)与之比较EOF.我没有查看它的值EOF,但肯定不是01- 意味着第二次比较永远不会返回错误.