HDUOJ2000——ASCII码排序&键盘缓冲区参与信息问题&初始化的重要性

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必须初始化!!!!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值