在线编译器 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+1; j <10; j++) { if (a[i] == a[j] && i != j&&i!=n) { printf("%d ", a[i]); n=j; } } } return 0; }
这段代码试图找出数组中重复出现的数字并打印出来。它读取10个整数,然后通过双重循环比较每对元素,当发现重复时打印该数字。但代码中存在逻辑问题,导致输出结果可能不正确。

- 变量 `n` 未初始化,直接使用 `i != n` 进行比较,这会导致未定义行为。你需要明确 `n` 的用途,并给它一个合理的初始值。
- 当前逻辑只会在发现重复时更新 `n`,但 `n` 的作用不清晰。实际上,你只需要比较 `a[i]` 和 `a[j]` 是否相等,不需要额外判断 `i != n`。这个条件反而可能跳过一些重复数字。