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

#include <stdio.h> int main() { int x, digit, counter=0; scanf("%d", &x); while (x >= 1) { digit = x % 10; if (digit = 9) { counter++; } x = x / 10; } if (counter == 1) { printf("YES\n"); } else { printf("NO\n"); } return 0; }
这段代码的目的是判断一个整数中是否恰好包含一个数字9。它通过循环取出每一位数字,并统计9出现的次数,最后根据次数输出YES或NO。

代码中存在一个逻辑错误,导致它无法正确判断。

- 在第8行,`if (digit = 9)` 使用了赋值运算符 `=`,而不是比较运算符 `==`。这会将 `digit` 赋值为9,并且条件永远为真,导致每次循环都增加计数器,最终结果总是YES(除非数字为0,但循环条件 `x >= 1` 会跳过0)。你需要将赋值改为比较。
- 另外,循环条件 `while (x >= 1)` 在 `x` 为0时不会执行,但0本身不包含数字9,所以输出NO是合理的。不过,如果输入是负数,循环也不会执行,但题目可能只考虑非负整数。你可以思考是否需要处理负数或0的情况。