题目描述
输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。
输入
输入数据有多组,每组占一行,有三个字符组成,之间无空格。
输出
对于每组输入数据,输出一行,字符中间用一个空格分开。
样例输入 Copy
qwe asd zxc
样例输出 Copy
e q w a d s c x z
提示
注意:scanf("%c",&ch)格式读字符时,所有字符都是有效输入,如回车符、空格符等,如以下程序不能正常读入第二组输入数据
while(scanf("%c%c%c",&a,&b,&c)!=EOF)
{
if(a>b)
{
temp=a;a=b;b=temp;
}
if(a>c)
{
temp=a;a=c;c=temp;
}
if(b>c)
{
temp=b;b=c;c=temp;
}
printf("%c %c %c\n",a,b,c);
}
原因是第一行输入最后的回车会被下一个scanf语句中的第一个%c读给a;
解决方法如下:
while(scanf(" %c%c%c",&a,&b,&c)!=EOF)
{
......
}
或
while(scanf("%c%c%c ",&a,&b,&c)!=EOF)
{
......
}
while(scanf("%c%c%c\n",&a,&b,&c)!=EOF)
{
......
}
在scanf的格式控制串中加入空白符的作用是跳过0个或多个空白符(包括空格、回车或制表符)。
代码:
//字符排序
//多组,每组一行,3个
//输入:
//qwe
//asd
//zxc
//输出:
//e q w
//a d s
//c x z
//while(scanf("%c%c%c",&a,&b,&c)!=EOF)
//while(scanf(" %c%c%c",&a,&b,&c)!=EOF)
//while(scanf("%c%c%c ",&a,&b,&c)!=EOF)
//while(scanf("%c%c%c\n",&a,&b,&c)!=EOF)
//在scanf的格式控制串中加入空白符的作用是跳过0个或多个空白符(包括空格、回车或制表符)。
#include <stdio.h>
int main ()
{
char a,b,c;
char temp=0;
while(scanf("%c%c%c",&a,&b,&c)!=EOF)
{
getchar();
if(a<b)
{
temp=a;
a=b;
b=temp;
}
if(c<b)
{
temp=c;
c=b;
b=temp;
}
if(c>a)
{
temp=a;
a=c;
c=temp;
}
printf("%c %c %c\n",b,c,a);
}
return 0;
}
运行结果:
提交:
有点奇怪的地方,按照题中所给的提示,就会出现如下情况
所以还是建议使用
getchar();
或使用4个变量来解决第一行输入最后的回车会被下一个scanf语句中的第一个%c读给a,的问题
while(scanf("%c%c%c%c",&a,&b,&c,&d)!=EOF)