0 c
所以目前我正在从 C 编程语言第二版书中学习 C,它说:
while (c = getchar() != EOF) {
}
Run Code Online (Sandbox Code Playgroud)
等同于:
while (c != EOF) {
c = getchar();
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行刚刚编写的代码时:
#include <stdio.h>
int main() {
char c;
int times;
while (c = getchar() != EOF) {
if (c == 'a') {
++times;
}
}
printf("%d\n", times);
}
Run Code Online (Sandbox Code Playgroud)
times它输出的值是 0 而不是我输入 'a' 字符的实际值。现在在这段代码中,它工作正常:
#include <stdio.h>
int main() {
char c;
int times;
while (c != EOF) {
c = getchar();
if (c == 'a') {
++times;
}
}
printf("%d\n",times);
}
Run Code Online (Sandbox Code Playgroud)
如果我输入a3 次,它输出的值是3.
优先!
c = getchar() != EOF
Run Code Online (Sandbox Code Playgroud)
方法
c = ( getchar() != EOF ) // Assigns `0` or `1` to `c`.
Run Code Online (Sandbox Code Playgroud)
但你想要
( c = getchar() ) != EOF
Run Code Online (Sandbox Code Playgroud)
另请注意,c需要是一个int.
这意味着你可以使用
for (int c; ( c = getchar() ) != EOF; ) {
...
}
Run Code Online (Sandbox Code Playgroud)
但是我更喜欢
while (1) {
int c = getchar();
if (c == EOF)
break;
...
}
Run Code Online (Sandbox Code Playgroud)