Online Compiler C

#include <stdio.h> int main() { int a,ch[11];//tell me:ch[] need or not init??? and how to init it?={0}will only init ch[0] or all vairables?? scanf("%d",&a); while(a>=10) { if(ch[a%10]) { printf("YES"); return 0; } ch[a%10]=1; } printf("NO"); return 0; }
这段代码试图判断一个整数中是否有重复的数字。它使用数组 `ch` 来标记每个数字(0-9)是否出现过。但代码存在几个问题。

- 数组 `ch` 没有被初始化。在 C 语言中,局部数组的初始值是不确定的,所以 `if(ch[a%10])` 会读取垃圾值,导致判断错误。`={0}` 会将数组所有元素初始化为 0,不是只初始化第一个。
- 循环条件 `while(a>=10)` 只处理了数字个数大于等于2的情况,但输入的数字本身可能小于10,此时循环不会执行,直接输出 "NO",这是正确的。但循环内部没有更新 `a` 的值,导致死循环。

- 提示1:数组初始化 `={0}` 会将所有元素设为 0,这是正确的做法。但你需要检查循环中 `a` 的值是否在变化,否则循环会无限执行。
- 提示2:循环中每次取出最低位数字后,应该去掉这一位,例如用 `a = a / 10`,否则 `a` 不变,循环永远不会结束。