用c语言写 一个任意整数的降序数

#include
#include
int main(void)
{

int j,n;
int i=0;
int a[10];
printf("请输入一个整数: ");
scanf("%d", &n);
while (n > 0)
{
a[i] = n % 10;

n = n / 10;

i++;

}

for (i=0; i<10;i++)

for (j=0;j<10-i-1;j++)
{

if (a[j] < a[j+1])
{

int t=a[j];

a[j]= a[j+1];

a[j+1] = t;

}
}
for(i=0;i<10;i++)
printf("%d ",a[i]);
}

当输入的数不足10位时,不足的位会出现-858993460

请问这个怎么改图片

其实就是因为你没有把数组的后三位给填满,造成的,

你先把这个数组每一位初始化都为0,这样你位数不到10位时候,后面的位数不为null,都为0 ,他就会自动进行排序了

告诉你一个最简单的方法,不要按照整数接收,直接按照字符串接收,让后strlen得到长度,之后直接对比排序打印就可以了。
你这个的原因就是楼上的说法,他的方法你只要在定义数组的时候改成 a[10] = {0};就可以了。原因是在栈中分配的内存是不会自动清零的。

#include<stdio.h>
#include <stdlib.h>
int n,i,j,length;
char *strs;

int len(n){
    int length = 0;
    while(n>0) {
            n=n/10;
            length++;
     }
    // printf("the nubmer is:%d\n",length);

     return length;
     }

     int sort(strs,length){
        char *str = strs;
        str[1] = 0;
         while (n > 0) {
                str[i] = n % 10;
         n = n / 10;
         i++;
         }
         for (i=0; i<length;i++)
            for (j=0;j<length-i-1;j++) {
                if (str[j] < str[j+1]) {
                    int t=str[j];
                     str[j]= str[j+1];
                     str[j+1] = t;
                    }
            }
            return 0;
         }

         int main(){
           //  int len();
             int lens = 0;
             printf("请输入一个整数: ");
             scanf("%d", &n);
             lens = len(n);
          //   printf("%d",lens);
              printf("\n");

              strs=(char*)malloc(length*sizeof(char));
             if (NULL == strs)
                    exit (1);
             sort(strs,lens);

             for(i=0;i<lens;i++)
                printf("%d ",strs[i]);
                printf("\n");

            return 0;
             }