关于C语言scanf输入char类型时候跳过的问题

今天手头有份纸质调查问卷需要统计下,想想人工一个个做加法太过于繁琐,所以写了个小程序,输入选项进行自动统计,但是在

scanf("%d",&totalPiece);
/*
*statements
*/
scanf("%c",&choice);
switch(*){
  ****
}

中出错,直接跳过第二个scanf,而直接进入switch。通过网上查找,原来"我们每击打一下"Enter"键,向键盘缓冲区发去一个“回车”(\r),一个“换行"(\n),在这里\r被scanf()函数处理掉了(姑且这么认为吧^_^),而\n被scanf()函数“错误”地赋给了c.解决办法:可以在两个scanf()函数之后加个fflush(stdin)"

个人C语言不精,推测,这是“\n”进入了缓存区被scanf("%c",&choice)读到了,所以ffluch就是清空缓存区。

通过在网上搜索,这里需要额外说明的是:

setbuf(stdin,NULL);(这个windows和linux下都可以)

fflush(stdin);(这个只能windows);

于是针对上面代码,简单解决方法就是:

scanf("%d",&totalPiece);
/*
*statements
*/
setbuf(stdin,NULL);//"fflush(stdin);"is also available if you are under windows 
scanf("%c",&choice);
switch(*){
  ****
}

 

 

转载于:https://www.cnblogs.com/C-paradox/p/3582318.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值