Онлайн компилятор C

#include <stdio.h> int main() { int c, count = 0; while ((c = getchar() != EOF && c != '\n')) { if (c >= '0' && c <= '9') { count++; } } printf("%d\n", count); return 0; }
这段代码试图统计输入中数字字符的个数,但有一个关键错误导致它无法正确工作。

问题出在 while 循环的条件部分。`c = getchar() != EOF && c != '\n'` 这个表达式因为运算符优先级的问题,实际上被解释为 `c = (getchar() != EOF && c != '\n')`,也就是说 c 被赋值为一个布尔值(0或1),而不是读取到的字符。因此后续判断字符是否为数字的 `if` 语句永远不会成立。

- 注意运算符优先级:赋值运算符 `=` 的优先级低于比较运算符 `!=` 和逻辑运算符 `&&`,所以需要添加括号来确保先读取字符再比较。
- 同时注意,在循环条件中同时检查 `c != '\n'` 时,c 还没有被赋值,这会导致未定义行为。应该先读取字符,再判断是否结束。