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

 

 

posted @ 2014-03-05 13:59  C_Paradox  阅读(1143)  评论(0编辑  收藏  举报