这是我的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
。
为什么我在这里得到无限循环?
答案 0 :(得分:5)
while( ( c == fgetc( fin_length ) ) != EOF ) {
你有太多的等号。这应该是
while( ( c = fgetc( fin_length ) ) != EOF ) {
当您使用==
时,最终会进行两次比较。第一个是c
与fgetc()
的返回值之间的比较。
第二次比较将结果(true
或false
)与EOF
进行比较。我没有查找EOF
的值,但肯定不是0
或1
- 这意味着第二次比较永远不会返回false。
答案 1 :(得分:4)
因为你曾经使用过==
,所以你需要这个:
while ((c = fgetc(fin_length)) != EOF) {
你从==
得到一个布尔值,然后将其与EOF
进行比较,它永远不会相等,所以你的循环是无限的。
答案 2 :(得分:2)
因为==
(相等)与=
(赋值)不同。
快乐的编码。