为什么在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;
...
}
THE END
二维码