在线编译器 C

#include <stdio.h> int main() { int x, digit, counter=0; scanf("%d", &x); while (x >= 1) { digit = x % 10; while (digit = 9) { counter++; } x = x / 10; } if (counter == 1) { printf("YES\n"); } else { printf("NO\n"); } return 0; }
这段代码试图判断一个整数中是否恰好包含一个数字9。但代码中存在逻辑错误,导致程序可能陷入死循环或无法正确统计。

- 内层while循环的条件写成了`digit = 9`,这是赋值语句而不是比较。在C语言中,赋值表达式的结果是被赋的值,所以这个条件永远为真(因为9是非零值),导致内层循环无限执行,程序卡住。
- 即使修正为比较`digit == 9`,内层循环也没有改变digit的值,同样会无限循环。实际上,你只需要在发现digit等于9时增加计数器,不需要再用一个循环。

- 另外,while循环的条件`x >= 1`在x为0时结束,但x可能为负数,不过对于正整数输入是可行的。