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

#include <stdio.h> enum{size=10}; int main() { int a[size]; for(int i=0;i<size;i++){ scanf("%d",&a[i]); }int num=0,b[10]; while(num<size){ for(int i=0;i<size;i++){ if(a[num]==a[i]){ b[num]++; } }num++; } for(int i=0;i<size;i++){ if(b[i]>=2){ printf("%d ",a[i]); } } return 0; }
这段代码的目的是读取10个整数,然后输出其中出现次数大于等于2的元素。但代码中存在逻辑错误,导致输出结果不正确。

主要问题在于数组b没有初始化。b数组用于记录每个位置元素的出现次数,但声明时没有赋初值,所以b[num]++操作是在一个随机值上累加,导致计数结果错误。

- 在使用数组b之前,需要将其所有元素初始化为0,否则累加操作会基于不确定的初始值进行。
- 当前的双重循环逻辑是:对于每个位置num的元素,遍历整个数组统计其出现次数。但这样会重复统计,并且当有重复元素时,每个重复位置都会输出一次,而不是只输出一次。你需要考虑如何避免重复输出相同的数字。