为什么在while循环条件中将getchar()分配给变量会导致输出为0?

所以目前我正在从 C 编程语言第二版书中学习 C,它说:

while (c = getchar() != EOF) {
}

等同于:

while (c != EOF) {
   c = getchar();
}

但是,当我运行刚刚编写的代码时:

#include <stdio.h>

int main() {
    char c;
    int times;
    
    while (c = getchar() != EOF) {
        if (c == 'a') {
            ++times;
        }
    }
    printf("%dn", times);
}

times它输出的值是 0 而不是我输入 'a' 字符的实际值。现在在这段代码中,它工作正常:

#include <stdio.h>

int main() {
    char c;
    int times;
    
    while (c != EOF) {
        c = getchar();
        if (c == 'a') {
            ++times;
        }
    }
    printf("%dn",times);
}

如果我输入a3 次,它输出的值是3.

回答

优先!

c = getchar() != EOF

方法

c = ( getchar() != EOF )   // Assigns `0` or `1` to `c`.

但你想要

( c = getchar() ) != EOF

另请注意,c需要是一个int.


这意味着你可以使用

for (int c; ( c = getchar() ) != EOF; ) {
   ...
}

但是我更喜欢

while (1) {
   int c = getchar();
   if (c == EOF)
      break;

   ...
}


以上是为什么在while循环条件中将getchar()分配给变量会导致输出为0?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>