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

#include <stdio.h> enum { SIZE = 12 }; int main() { int A[SIZE]; for (int i = 0; i < SIZE; i++) { scanf("%d", &A[i]); } int temp[4]; for(int i = 0; i < 4; i++) { temp[i] = A[8 + i]; } for (int i = 11; i == 4; i--) { A[i] = A[i - 4]; } for (int i = 0; i < 4; i++) { printf("%d ", temp[i]); } for (int i = 4; i < SIZE; i++) { printf("%d ", A[i]); } return 0; }
这段代码试图将数组A的后4个元素(索引8到11)移动到数组的前面,但移动逻辑有错误。

- 第二个循环 `for (int i = 11; i == 4; i--)` 的条件写成了 `i == 4`,这导致循环一次都不会执行,因为初始值11不等于4。这个循环本意应该是将元素向后移动,但条件写错了。
- 移动元素时,如果从前往后覆盖,会丢失数据。通常需要从后往前移动,或者使用临时变量保存被覆盖的值。

提示:
- 检查第二个循环的条件部分,确保循环能正确执行需要的次数。
- 思考移动元素时,如果从索引11开始向前移动,会不会覆盖掉还没移动的元素?应该从哪个方向开始移动才能避免数据丢失?