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

#include <stdio.h> int find_missing(int n, int a[]) { int min = a[0]; for (int i = 0; i < n; i++) { if (a[i] < min) { min = a[i]; } } int t = min; int c[t] = {0}; while (t < min + n) { c[t]++; t++; } for (int i = min; i < min + n; i++) { if (c[i] == 0) { return i; } } int main() { int a[1000], answer; while (scanf("%d", a)) { answer = find_missing(10, a); } printf("%d", answer); return 0; }
这段代码试图找出一个长度为n的数组中缺失的一个整数,但存在几个问题。

首先,代码中定义了一个变长数组 `int c[t] = {0};`,但 `t` 的值是 `min`,而数组索引应该从0开始,这里直接用 `c[t]` 访问会导致越界。另外,`c` 数组的大小是 `t`,但后面却用 `c[i]` 访问索引 `i`,而 `i` 是从 `min` 开始的,这也会越界。

- 检查 `c` 数组的索引使用:数组索引应从0开始,而不是从 `min` 开始。你需要将数组元素与索引对应起来,比如用 `c[i - min]` 来访问。
- 注意 `main` 函数的位置:当前 `main` 函数被嵌套在 `find_missing` 函数内部,这是语法错误。`main` 应该独立定义在全局作用域中。