#include<stdio.h>
int main()
{
char ch;
printf("选择A或者B(按回车键确认):");
scanf("%c",&ch);
while(1)
{
if(ch == 'B' || ch == 'b')
{
printf("对不起,您输入的答案错误,请重新输入!\n选择A或者B(按回车键确认):");
//getchar();
scanf("%c",&ch);
printf("ch=%c",ch);
}
else
{
printf("\n正确\n");
break;
}
}
return 0;
}
上面代码的得到的结果是:
貌似跟我预想的不一样,我本想如果输入的是'B'或者'b'就继续循环输入,但是结果确实直接做了一次循环就停止了。为什么呢?
原来在循环外的那个scanf做完后按下的回车键进入了缓存,而进入循环执行scanf后(这次输入的也是'b'),缓存的内容应该是buffer[] ={'b','\n'};而执行printf("ch=%c",ch);时取的值就是'\n',所以看上去好像没有执行scanf语句,其他执行了,只是这次打印的字符不是刚刚输入的'b',而是它前一个字符'\n',所以要达到我本来的效果,则需要先将'\n'从缓存中清除掉,调用一次getchar();即可,如上代码也只需将注释的那一句代码解注释即可。