Online Compiler C

#include <stdio.h> int main() { int arr[10]; int a, b, c; for (int a = 0; a < 10; a++) { scanf("%d", &arr[a]); } for (a = 0; a < 9; a++) { for (b = 0; b < 9 - a; b++) { int last1 = arr[b] % 10; int last2 = arr[b + 1] % 10; if (last1 > last2) { c = arr[b]; arr[b] = arr[b + 1]; arr[b + 1] = c; } } } for (int a = 0; a < 10;a++) ; { printf("%d ", arr[a]); } return 0; }
这段代码试图实现一个冒泡排序,根据数组元素个位数字的大小对数组进行升序排列,然后输出排序后的结果。但代码中存在几个问题。

- 在第一个for循环中,你重新声明了变量`int a`,这导致外层的`a`变量被隐藏。后续的排序循环使用的是外层的`a`,但第一个循环结束后`a`的值是10,所以排序循环中的`a`初始值不对,可能无法正确遍历。
- 最后的输出部分,`for (int a = 0; a < 10;a++)`后面多了一个分号,导致循环体为空。紧接着的`{ printf("%d ", arr[a]); }`只执行一次,且此时`a`的值是10,访问`arr[10]`会越界,输出错误数据。