当前位置: 代码迷 >> C语言 >> 输入一个5位整数,再逆序输入的问题
  详细解决方案

输入一个5位整数,再逆序输入的问题

热度:223   发布时间:2007-07-21 21:00:47.0
输入一个5位整数,再逆序输入的问题

输入一个不大于5位数的整数.
输出这个整数
输入这个数的位数
按大小输出这个整数的各个位数的数字



#include "stdio.h"
main()
{
char st[5];
int k=0;
printf("输入一个不多于5位的正整数:\n");
gets(st);
puts(st);
k=strlen(st);
printf("这是一个%d位数",k);
(int) st[5];
int tmp=0,i=0,j=0;

for(i=0;i<5;i++)
{

j=i+1;

if(st[i]>st[j])

{

tmp=st[i];

st[i]=st[j];

st[j]=tmp;}
}/*交换下标*/

}

puts(st);
}

搜索更多相关的解决方案: 逆序  整数  STRONG  位数  输入  

----------------解决方案--------------------------------------------------------
看来你是不知道C语言中有一个规定,定义变量只能在执行语句的开头定义.
----------------解决方案--------------------------------------------------------
所以你这句int tmp=0,i=0,j=0; 写在中间是不合法的
----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽

坚持到底
2007-07-27 16:02:25
wengjinxin

等 级:新手上路
帖 子:41
专家分:0
注 册:2007-7-17
  得分:0 

#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);这样就不会溢出了
----------------解决方案--------------------------------------------------------
回复:(_2007)输入一个5位整数,再逆序输入的问题
我的程序,请高手指正啊:
#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就会有乱码.


----------------解决方案--------------------------------------------------------
以下是引用水漪儿在2007-7-28 8:38:58的发言:
char st[6]; //字符串后面固定有个'\0',所以数组大小要定义为6,而不是5,不然会溢出
5楼的printf是不是可以printf("这是一个%ld位数",k);这样就不会溢出了


如果不定义成 6 的话,这将处理不了五位数的整数,因为他下面用的是gets(st)这样我语句


当然我上面那个程序还没有做到最完善,我在那行注视已经说了


总之,你不定义成 6 ,输入一个五位数的整数将会出现

----------------解决方案--------------------------------------------------------
回复:(vbc)就象6楼说的一样,你的字符串的长度应该声...
你说的好像是5楼吧,
----------------解决方案--------------------------------------------------------
  相关解决方案