问题描述:
输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。
输入
输入数据有多组,每组占一行,有三个字符组成,之间无空格。
输出
对于每组输入数据,输出一行,字符中间用一个空格分开。
示例输入
qwe
asd
zxc
示例输出
e q w
a d s
c x z
正确解法之一:
#include <stdio.h>
int main()
{
char a, b, c, temp;
while (scanf("%c%c%c", &a, &b, &c) != EOF)
{
getchar(); //不加getchar()输出第二遍时会遇到问题
if (a > b)
{
temp = a;
a = b;
b = temp;
}
if (c <= a)
{
temp = c;
c = b;
b = temp;
temp = b;
b = a;
a = temp;
}
else if (c > a && c < b)
{
temp = c;
c = b;
b = temp;
}
printf("%c %c %c\n", a, b, c);
}
return 0;
}
getchar()在本题中的作用为吸收回车符。
从键盘输入的字符,会存放到缓存区中,包括回车符。例如:输入“abc回车”之后,缓冲区中存了有四个字符'a'、'b'、'c'、'\n',如果上面程序中没有getchar(),则第一次从缓存区中提取了三个字符之后,还剩下了一个'\n',则下次再输入三个字符时,缓存区中会把上次剩下的回车符也读入字符中造成排序错误(如图1)。因此需要使用getchar()吸收缓存区的回车符。