Online Compiler C

#include <stdio.h> int find_missing(int n, int a[]) { for (int i =0 ; i < n-1; i++) { int min = i; for(int j = i+1 ; i <n;j++) { if(a[j] < a[min]) { min =j; } } int tem = a[min]; a[min] = a[i]; a[i] = tem; } int i = 0; while (i != -1) { if(a[i+1] - a[i] ==2) { return a[i]+1; } i++; } return 0; } int main() { printf("Hello, World!\n"); return 0; }
这段代码定义了一个函数 `find_missing`,它试图在一个整数数组中找到缺失的一个数字。代码首先对数组进行选择排序,然后遍历排序后的数组,寻找相邻元素差为2的位置,并返回中间缺失的数。但代码中存在几个问题。

- 选择排序的内层循环条件写错了:`for(int j = i+1 ; i <n;j++)` 这里应该是 `j < n` 而不是 `i < n`,这会导致循环无法正确执行。
- 排序后的查找循环 `while (i != -1)` 中,`i` 从0开始递增,永远不会等于-1,所以循环会一直运行直到数组越界。应该使用一个有限次数的循环,比如 `for` 循环,并且要确保访问数组时下标不越界。
- 主函数 `main` 只是打印了 "Hello, World!",并没有调用 `find_missing` 函数来测试,所以目前代码不会输出任何缺失数字的结果。