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

#include <stdio.h> int main() { int a[12]; int temp; for (int i = 0; i < 12; i++) { scanf("%d", &a[i]); } for (int i = 0, j = 3; i < j; i++, j--) { temp = a[i]; a[i] = a[j]; a[j] = temp; } for (int i = 4, j = 7; i < j; i++, j--) { temp = a[i]; a[i] = a[j]; a[j] = temp; } for (int i = 8, j = 11; i < j; i++, j--) { temp = a[i]; a[i] = a[j]; a[j] = temp; } for (i = 0; i < 12; i++) { printf("%d ", a[i]); } return 0; }
这段代码的功能是:读入12个整数,然后将数组分成三个长度为4的段(索引0-3、4-7、8-11),在每个段内进行反转(即第一个和最后一个交换,第二个和倒数第二个交换),最后输出整个数组。

代码中存在一个编译错误:最后一个for循环中使用了变量`i`,但`i`没有在该循环中重新声明。前面的for循环中`i`是在循环内部声明的,作用域仅限于那个循环,因此最后一个循环中的`i`是未定义的。

- 检查最后一个for循环中变量`i`的声明方式,确保它在当前作用域内是可见的。
- 注意C语言中变量的作用域规则:在for循环内部声明的变量只在该循环内有效。