Online Compiler C

#include <stdio.h> void sort_array(int size, int a[]) { for (int i = 0; i < size; i++) { for (int j = i + 1; j < size; j++) { if (a[i] > a[j]) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } } } for (int i = 0; i < size; i++) { while (i > 1 && a[i] == a[i + 1]) { i++; } printf("%d", a[i]); } } int main() { return 0; }
这段代码定义了一个排序函数,它使用选择排序法对数组进行升序排列,然后尝试打印去重后的结果。但主函数中并没有实际调用这个函数,所以程序运行后不会有任何输出。

- 在打印部分的 while 循环中,当 i 递增后,循环条件再次检查 a[i] 与 a[i+1] 是否相等,但此时 i 已经改变,可能导致跳过多个重复元素时出现数组越界访问。例如当 i 接近 size-1 时,a[i+1] 可能超出数组范围。
- 打印去重逻辑的 while 循环内部直接修改了循环变量 i,这会影响外层 for 循环的控制,可能导致某些元素被跳过或重复打印。可以考虑用另一种方式记录需要打印的元素,而不是在循环中修改 i。