#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;
}