各位大佬帮我看看我这个代码哪里出问题了
#include <stdio.h>#include <stdlib.h>
问题:输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。
int main()
{
char x,y,z;
int i,j;
while(scanf("%c%c%c",&x,&y,&z)!=EOF)
{
char Rank[]={x,y,z};
for(i=1;i>=0;i--) // 控制最大下标
{
for(j=0;j<=i;j++)
{
if(strcmp(Rank,Rank)==1) //ASCII码值大则交换
{
char temp;
temp=Rank;Rank=Rank;Rank=temp;//交换顺序,按小到大排序
}
}
}
printf("%c %c %c",Rank,Rank,Rank);
}
return 0;
}
本帖最后由 jackz007 于 2019-10-1 13:47 编辑
这一句
if(strcmp(Rank,Rank)==1) //ASCII码值大则交换
必须改成下面这样:
if(Rank > Rank) //ASCII码值大则交换
while(scanf("%c%c%c",&x,&y,&z)!=EOF) { // 受键盘缓冲区滞留 '\n' 的干扰,循环状态下,不能保证正确获得字符。
. . . . . .
}
必须这样修改:
while(scanf("%c%c%c",&x,&y,&z)!=EOF) {
. . . . . .
fflush(stdin); // 添加此句,下一次 scanf() 读取键盘输入之前,清空键盘缓冲区
}
程序应该有退出通道,下面的代码在键盘输入空回车的时候会退出运行。
#include <stdio.h>
#include <string.h>
int main()
{
char s , c , x ;
int i , j ;
for(;;) {
printf("\n") ;
fgets(s , 80 , stdin) ;
if(strlen(s) > 1) {
sscanf(s , "%c%c%c" , & c , & c , & c);
for(i = 1 ; i < 3 ; i ++) {
for(j = i ; j && c < c ; j --) {
x = c ;
c = c ;
c = x ;
}
}
printf("\n") ;
printf("%c %c %c\n" , c , c , c) ;
} else {
break ;
}
}
} jackz007 发表于 2019-10-1 13:15
这一句
if(strcmp(Rank,Rank)==1) //ASCII码值大则交换
是因为strcmp只能进行字符串的比较而不能进行字符的比较对吗?
我那个有退出渠道,就是输入CTRL+Z的时候就退出了- -不过谢谢你
页:
[1]