C语言while(getchar()!='\n');

为什么while(getchar()!='\n');能起到清除输入缓冲区的非法字符的作用#include<stdio.h>#include<stdlib.h>#inclu... 为什么while(getchar()!='\n');能起到清除输入缓冲区的非法字符的作用

#include<stdio.h>
#include<stdlib.h>
#include<stdio.h>
main()
{
int magic,guess,counter=0;
int ret;
srand(time(NULL));
magic=rand()%100+1;
do{
printf("Please guess a magic number:");
ret=scanf("%d",&guess);
while(ret!=1)
{
while(getchar()!='\n'); /*清除输入缓冲区的非法字符*/
printf("Please guess a magic number:");
ret=scanf("%d",&guess);
}
counter++;
if(guess>magic)
printf("Wrong!Too big!\n");
else if(guess<magic)
printf("Wrong!Too small!\n");
else
printf("Right!\n");
}while(guess!=magic&&counter<10);
printf("counter=%d\n",counter);
}
展开
 我来答
百度网友834a0a1e3
推荐于2017-09-19 · TA获得超过835个赞
知道小有建树答主
回答量:1031
采纳率:62%
帮助的人:156万
展开全部
getchar()函数在while循环中不断读取缓冲区的字符
然后与换行符比较,不等的自热就舍弃了
所以作用相当于flush缓冲区了
更多追问追答
追问
while(getchar()!='\n');      
printf("Please guess a magic number:");

while怎么理解?
与换行符不等时直接执行 printf("Please guess a magic number:"); ,然后不断循环吗
追答
while 后面有分号,说明这个while是个空循环,没有执行块的
下面的printf语句是循环结束后执行的
匿名用户
2015-01-05
展开全部
这句循环执行getchar语句,会依次读取缓冲区的字符知道回车键结束符,读取完成后执行一句空语句“;”这样所有缓冲区的字符都读入程序并依次被覆盖执行了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式