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

#include <stdio.h> int main(){ int c=0; int a; scanf("%d",&a); int const N=100; int A[N]; while(a>0){ A[c]=a%10; c++; a=a/10; } int j=c;int d=0; for(int i=0;i<c-1;i++){ for (i=0;i<j-1;i++){ if (A[j]<A[j+1]){ d=A[j]; A[j]=A[j+1]; A[j+1]=d; } } } for (i=0;i<j;i++){ printf("%d",A[j]); } return 0; }
这段代码的目的是将一个整数按位拆分,然后尝试对各位数字进行排序,最后输出。但代码中存在多个逻辑错误。

- 在排序部分,你使用了两个嵌套的 `for` 循环,但外层循环的变量 `i` 和内层循环的变量 `i` 是同一个,这会导致内层循环结束后外层循环立即结束。另外,内层循环中比较的是 `A[j]` 和 `A[j+1]`,但 `j` 是数字的位数,这里应该用内层循环的变量来访问数组元素,而不是固定的 `j`。

- 最后的输出循环中,你打印的是 `A[j]`,但 `j` 是位数,所以每次打印的都是同一个越界位置。应该用循环变量 `i` 来访问数组元素。