hdu 2000 ASCII码排序
题目描述
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Problem Description
输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。
Input
输入数据有多组,每组占一行,有三个字符组成,之间无空格。
Output
对于每组输入数据,输出一行,字符中间用一个空格分开。
Sample Input
qwe
asd
zxc
Sample Output
e q w
a d s
c x z
题目难点
- 题目要求“输入数据有多组”,用while(scanf("%c%c%c%*c",&a,&b,&c)!=EOF) 来实现一直输入(实现方法有很多,截取了网上常用的一种)
- 当测试第一组数据的时候,很容易成功;
但当测试第二组第三组数据的时候就发现问题了;
原因是程序把你用来确认输入的“回车键”当作下一组输入的第一个字符
解决方法1:专门留一个空字符给回车键,(见第8行输入scanf("%c%c%c % * c",&a,&b,&c));其中 “ * ” 表示该输入项读入后不赋予任何变量,即跳过该输入值。参考问题解答1
解决方法2:用getchar()吞掉回车键。getchar()是一种函数,功能是从stdio流中读字符。参考问题解答2
问题解答1
#include <stdio.h>
int main()
{
char a, b, c, t;
while( scanf("%c%c%c%*c",&a,&b,&c)!=EOF )
{
if( a>b ) { t=a; a=b; b=t; }//如果a的ASCII码大于b,就交换a,b
if( a>c ) { t=a; a=c; c=t; }
if( b>c ) { t=b; b=c; c=t; }
printf("%c %c %c
",a,b,c);
}
return 0;
}
问题解答2
#include <stdio.h>
int main()
{
char a, b, c, t;
while( scanf("%c%c%c",&a,&b,&c)!=EOF )
{
getchar();
if( a>b ) { t=a; a=b; b=t; }//如果a的ASCII码大于b,就交换a,b
if( a>c ) { t=a; a=c; c=t; }
if( b>c ) { t=b; b=c; c=t; }
printf("%c %c %c
",a,b,c);
}
return 0;
}