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

#include <stdio.h> int main() { int arr[10]; int i, a; for(i=0;i<10;i++) { scanf("%d", &arr[10]); } a=arr[0];arr[0]=arr[4];arr[4]=a; a=arr[1];arr[1]=arr[3];arr[3]=a; a=arr[5];arr[5]=arr[9];arr[9]=a; a=arr[6];arr[6]=arr[8];arr[8]=a; for(i=0;i<10;i++) { printf("%d", arr[i]); } return 0; }
这段代码的功能是:读取10个整数存入数组,然后交换数组中特定位置的元素(0和4交换,1和3交换,5和9交换,6和8交换),最后输出交换后的数组。

代码中存在一个关键错误:

- 在第一个循环中,`scanf("%d", &arr[10])` 每次都将输入写入数组的第11个位置(索引10),而数组只有10个元素(索引0到9)。这会导致数组越界,并且实际上没有正确存储用户输入的10个数。应该使用循环变量 `i` 作为索引,即 `&arr[i]`。