Online Compiler C

#include <stdio.h> int main() { int a[10]; int n; for (int i = 0; i < 10; i++) { scanf("%d", &a[i]); } for (int i = 0; i < 10; i++) { for (int j = i; j <10; j++) { if (a[i] == a[j] && i != j&&i!=n) { printf("%d ", a[i]); n=j; } } } return 0; }
这段代码试图找出数组中的重复元素并打印出来,但存在逻辑问题。它使用了一个未初始化的变量 `n`,并且重复检测的逻辑不正确。

- 变量 `n` 在使用前没有被初始化,这会导致未定义行为。你需要先给 `n` 一个初始值,或者重新思考如何标记已经处理过的重复元素。
- 内层循环从 `j = i` 开始,当 `i == j` 时条件 `i != j` 为假,所以不会打印自身。但问题在于,当找到重复时,你只打印了 `a[i]`,却没有避免后续再次打印同一个重复值。例如,对于数组 `[1, 1, 1]`,你的代码可能会多次打印 `1`。你需要考虑如何确保每个重复数字只被打印一次。