关于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(*){ **** }