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

#include <stdio.h> int main(){ const int N=10; int A[N],B[N],C[N]; int i,b=0,c=0; for(i=0;i<N;i++){ scanf("%d",&A[i]); } for(i=0;i<N;i++){ if(A[i]>0){ B[b]=A[i]; b++; } if(A[i]<0){ C[c]=A[i]; c++;} for (i=0;i<b;i++){ printf("%d",B[i]); } for (i=0;i<c;i++){ printf("%d",C[i]); } return 0; }
这段代码的目的是从键盘读入10个整数,然后将正数存入数组B,负数存入数组C,并输出这两个数组的内容。但代码中存在逻辑错误,导致输出结果不符合预期。

主要问题在于循环结构嵌套不当。你在同一个外层循环内部既进行正负数的分类,又立即输出B和C的内容,而且输出时又使用了同一个循环变量i,这会导致循环控制混乱。具体来说,当i从0到9遍历时,每处理一个A[i]就会立即输出当前B和C中所有已存储的元素,并且输出循环中的i会覆盖外层循环的i值,造成外层循环提前结束或行为异常。

- 提示1:将分类存入B和C的循环与输出B和C的循环分开。先完成所有10个数的分类,再用两个独立的循环分别输出B和C。
- 提示2:注意输出循环中不要使用与外层循环相同的变量名i,否则会互相干扰。可以换用其他变量如j或k来控制输出循环。