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

#include <stdio.h> int main() { int arr[10]; int a; for (int i = 0; i < 10; i++) { scanf("%d", &arr[i]); int a = arr[9]; arr[i + 1] = arr[i]; } a = arr[0]; for (int i = 0; i < 10; i++) { printf("%d", arr[i]); } return 0; }
这段代码试图实现数组元素的循环右移一位,但存在逻辑错误。当前代码在读取每个元素的同时就进行移动,导致数据被覆盖。

- 你在循环内部重新声明了 `int a = arr[9]`,这会在每次迭代中创建一个新的局部变量,而不是使用循环外声明的 `a`。应该只保留一个变量来暂存最后一个元素。
- 移动操作 `arr[i + 1] = arr[i]` 在循环中会覆盖尚未处理的下一个元素,导致数据丢失。正确的做法是先从后往前移动元素,或者先保存最后一个元素再整体移动。