Problem Description
输入三个字符后,按各字符的ASCII码从小到大的顺序输出这三个字符。
Input
输入数据有多组,每组占一行,有三个字符组成,之间无空格。
Output
对于每组输入数据,输出一行,字符中间用一个空格分开。
Sample Input
qwe
asd
zxc
Sample Output
e q w
a d s
c x z
代码如下:
#include <stdio.h>
#include <stdlib.h>
void sort(char i, char j, char k){
char temp;
if(i > j){
temp = i;
i = j;
j = temp;
}
if(j > k){
temp = j;
j = k;
k = temp;
}
if(i > j){
temp = i;
i = j;
j = temp;
}
printf("%c %c %c\n", i, j, k);
}
int main(int argc, char *argv[]) {
char i, j, k;
int f=1;
// // 接收输入字符
// while(scanf("%c%c%c", &i, &j, &k) != EOF){
// getchar();
// sort(i, j, k);
// }
//
// 接收输入字符
while(f != EOF){
f = scanf("%c%c%c", &i, &j, &k);
getchar();
sort(i, j, k);
}
return 0;
}
虽然题目不难,但是应该出现了两点问题:
1、在输入qwe后回车,出现了键盘缓冲区残余信息问题,即接收完qwe后不能正常接受asd;
这句不能正常接收字符,什么原因呢?我们用printf("c = %d\n", c);将C用int表示出来,启用printf("c = %d\n", c);这一句,看看scanf()函数赋给C到底是什么,结果是c=10 ,ASCII值为10是什么?换行即\n.对了,我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(\r),一个“换行"(\n),在这里\r被scanf()函数处理掉了(姑且这么认为吧^_^),而\n被scanf()函数“错误”地赋给了c.
解决办法:可以在两个scanf()函数之后加getchar(),但是要视具体scanf()语句加那个,这里就不分析了,读者自己去摸索吧。
2、int scanf(const char * restrict format,...);
两种循环结束实现,但是前一种f必须初始化!!!!