Online Compiler C

#include <stdio.h> int main() { int input; scanf("%d",&input); int a[10]; int now; while(input>0) { now=input%10; a[now]++; input/10; } if(a[10]>=2) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数中是否包含至少两个数字0。但代码有几个问题。

首先,数组 `a` 没有初始化,它的元素初始值是不确定的。当执行 `a[now]++` 时,如果 `now` 的值是0到9,但数组元素没有初始化为0,那么自增的结果不可预测。

其次,循环中的 `input/10;` 这一行只是计算了除法但没有将结果赋值给任何变量,所以 `input` 的值永远不会改变,循环会无限执行。

另外,`a[10]` 访问了数组越界,因为数组 `a` 的大小是10,有效索引是0到9。数字0对应的应该是 `a[0]`。

- 检查数组初始化:在使用数组元素之前,需要将所有元素设为0。
- 检查循环中的除法:需要将 `input/10` 的结果重新赋值给 `input`,否则循环不会结束。
- 检查数组索引:数字0对应的是 `a[0]`,不是 `a[10]`。