在线编译器 C

#include <stdio.h> int main() { int i, m, n; scanf("%d", &i); while (i != 0) { if (i % 10 == 9) { m = i % 10; i = i / 10; while (i != 0) { if (i % 10 == 9) { n = i % 10; break; } i = i / 10; } if (n == m) printf("YES"); else printf("NO"); break; } i = i / 10; } return 0; }
这段代码试图判断一个整数中是否包含两个相邻的数字9。但逻辑上有问题,变量m和n没有初始化,而且内层循环会改变i的值,导致外层循环无法正确继续。

- 变量m和n在使用前没有初始化。如果数字中没有9,或者只有一个9,m和n的值是未定义的,会导致错误判断。
- 内层while循环会不断将i除以10,直到找到第二个9或i变为0。但这样会破坏外层循环的i值,导致外层循环无法继续检查剩余的数字。你应该考虑如何在不破坏原始数字的情况下检查相邻的9。