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");} else{printf("NO"); }} return 0;
这段代码的目的是判断一个整数中是否有某个数字出现了至少两次。但代码中存在语法错误和逻辑问题。

- 代码中 `if(y==0,n0++)` 这种写法是错误的。在C语言中,条件判断应该用 `==` 比较,然后执行语句时用花括号 `{}` 或分号 `;` 分隔,不能直接用逗号连接条件和操作。这里应该写成 `if (y == 0) n0++;` 的形式,每个if语句都要独立写清楚。
- 最后的 `if(n0==2||...` 这个判断放在了循环内部,而且它的 `else` 会导致每次循环都输出一次结果。实际上应该在整个循环结束后,再根据计数判断是否输出"YES"或"NO"。

- 检查每个if语句的写法,确保条件判断和递增操作是分开的。
- 思考一下输出结果的位置:是应该在循环过程中每次判断,还是等所有数字都统计完再判断?