在线编译器 C

#include <stdio.h> int main() { int n, a[10], count = 0; scanf("%d", &n); for (int i = 0; n > 0; i++) { a[i] = n % 10; n /= 10; count++; } for (int i = 0; i < count; i++) { for (int j = i+1; i < count; i++) { if(a[i]<a[j]){ int temp=a[i]; a[i]=a[j]; a[j]=temp; } } } for (int i = 0; i < count; i++){ printf("%d",a[i]); } return 0; }
这段代码的目的是将输入的数字按位拆开,然后进行降序排序,最后输出排序后的数字序列。但代码中存在逻辑错误,导致排序部分无法正确执行。

- 在排序的双重循环中,内层循环的循环变量和条件写错了。你使用了 `for (int j = i+1; i < count; i++)`,这里应该用 `j` 来控制内层循环,而不是继续用 `i`。同时内层循环的条件应该是 `j < count`,并且每次循环后 `j` 应该递增,而不是 `i`。这个错误会导致内层循环无法正常遍历后面的元素,排序逻辑失效。

- 另外,数组 `a` 的大小固定为10,如果输入的数字位数超过10位,会导致数组越界。可以考虑使用动态方式或确保输入位数不超过数组容量。