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

#include <stdio.h> int main() { int a; int cnt = 0; scanf("%d", &a); while (a > 0) { int d = a % 10; if (d % 2 != 0) { cnt = 1; break; } n = n / 10; } if (cnt == 0) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数是否所有位都是偶数。但代码中有几个问题。

- 变量 `n` 没有被声明,但你在循环中使用了 `n = n / 10`,这会导致编译错误。你应该是想用变量 `a` 来不断除以10。
- 逻辑上,你设置 `cnt = 1` 并 `break` 当遇到奇数位时,这表示“有奇数位”,但你的输出 `YES` 对应 `cnt == 0`,即“没有奇数位”,所以输出逻辑是正确的,但变量名 `cnt` 容易让人误解。

- 提示1:检查循环中使用的变量名。你声明了 `a`,但循环里写的是 `n`,需要统一。
- 提示2:思考循环条件 `while (a > 0)` 是否会在每次迭代后更新 `a` 的值?如果 `a` 不改变,循环会无限运行。