Online Compiler C

#include <stdio.h> int main() { int n,n0=0,n1=0,n2=0,n3=0,n4=0,n5=0,n6=0,n7=0,n8=0,n9=0,y; scanf("%d",&n); while(n!=0){y=n%10; n=n/10; if(y==0) n0++; if(y==1) n1++; if(y==2) n2++; if(y==3) n3++; if(y==4) n4++; if(y==5) n5++; if(y==6) n6++; if(y==7) n7++; if(y==8) n8++; if(y==9) n9++; if(n0==2||n1==2||n2==2||n3==2||n4==2||n5==2||n6==2||n7==2||n8==2||n9==2) printf("YES"); return 0; } else{printf("NO"); } return 0;
这段代码试图判断一个整数中是否有某个数字出现了至少两次。但代码存在语法错误和逻辑问题。

- 代码中 `if(n0==2||...` 后面直接跟了 `printf("YES");` 和 `return 0;`,但缺少花括号,导致 `else` 没有对应的 `if`,编译会报错。
- 循环内部每次取一位数字就立刻检查是否出现两次,这样在数字还没处理完时就可能提前输出结果,逻辑不完整。例如输入 121,处理到第二位数字 2 时,n1 只出现一次,不会输出 YES,但实际最终 1 出现了两次。
- 输出 "YES" 或 "NO" 后程序应该结束,但当前结构混乱,需要理清判断时机。

- 检查花括号的配对,确保 `if` 和 `else` 结构正确。
- 考虑在循环结束后再判断是否有数字出现两次,而不是在循环中间判断。