Онлайн компилятор C

#include <stdio.h> int main() { int n,i,save_n,now; scanf("%d",&n); save_n=n; for(i=0;i<=9;i++){ int count_digit=0; while(n>0){ now=save_n%10; n/=10; } if(now=i){ count_digit++;} if(count_digit>1){ printf("%d",now);} } return 0; }
这段代码的目的是统计输入整数中每个数字出现的次数,并输出出现次数大于1的数字。但代码存在逻辑错误,导致无法正确实现功能。

主要问题在于循环结构的设计。外层循环遍历数字0到9,但内层while循环每次都会将n变为0(因为不断除以10),导致后续数字无法正确统计。同时,变量now的值只来自最后一次取模操作,且判断条件`if(now=i)`使用了赋值运算符=而非比较运算符==。

- 注意while循环中n每次都被除以10直到0,但外层循环需要n的原始值来重新统计每个数字。思考如何保存和恢复n的值。
- 检查`if(now=i)`这一行,赋值运算符和比较运算符的区别是什么?这里应该使用哪个?