#include <stdio.h>
#include <string.h> // strlen()函数要用到这个头文件
main()
{
char st[6]; //字符串后面固定有个'\0',所以数组大小要定义为6,而不是5,不然会溢出
char tmp;
int i,j,k;
printf("输入一个不多于5位的正整数:"); //输入还需做必要的控制,不然还是会有溢出问题
gets(st);
puts(st);
k=strlen(st);
printf("这是一个%d位数",k);
// 用冒泡法对数组st进行排序
for(i=0;i<k;i++)
for(j=0;j<k-i-1;j++)
if(st[j]>st[j+1])
{
tmp=st[j];
st[j]=st[j+1];
st[j+1]=tmp;
}
puts("\n按大小输出这个整数的各个位数的数字为:");
puts(st);
}
----------------解决方案--------------------------------------------------------
char st[6]; //字符串后面固定有个'\0',所以数组大小要定义为6,而不是5,不然会溢出
5楼的printf是不是可以printf("这是一个%ld位数",k);这样就不会溢出了
----------------解决方案--------------------------------------------------------
#include "Stdio.h"
#include "Conio.h"
main()
{
char a[5],*p,*q,b[5]="";
int i=0,t;
printf("请输入一个整数:(必须为数字)\n");
scanf("%s",a);
p=a;
while(*p!='\0')
{
printf("第 %d 个数是%c.\n",i+1,*p);
i++;
p++;
}
printf("这个整数的位数为: %d\n",i);
q=a;
for(t=i;t>0;)
{
b[t-1]=*q;
q++;
t--;
}
printf("逆序输出的整数为:%s\n",b);
getch();
}
[此贴子已经被作者于2007-7-28 10:35:39编辑过]
----------------解决方案--------------------------------------------------------
就象6楼说的一样,你的字符串的长度应该声明比实际的长度大一,因为还有'\0',
所以你的程序只能准确处理<=4个字符,>=5就会有乱码.
----------------解决方案--------------------------------------------------------
char st[6]; //字符串后面固定有个'\0',所以数组大小要定义为6,而不是5,不然会溢出
5楼的printf是不是可以printf("这是一个%ld位数",k);这样就不会溢出了
如果不定义成 6 的话,这将处理不了五位数的整数,因为他下面用的是gets(st)这样我语句
当然我上面那个程序还没有做到最完善,我在那行注视已经说了
总之,你不定义成 6 ,输入一个五位数的整数将会出现
----------------解决方案--------------------------------------------------------
----------------解决方案--------------------------------------------------------