c语言的问题关于while(scanf(“%d",&sum)!=1)

程序intmain(void){intsum;while(scanf(“%d",&sum)!=1)printf("ABC\n");return0;}运行后输入字符a,为什... 程序
int main(void)
{
int sum;
while(scanf(“%d",&sum)!=1)
printf("ABC\n");
return 0;
}
运行后输入字符a,为什么会一直重复输出ABC
而把循环改成while(scanf(“%d",&sum)==1)
输入数字只输出一次ABC
展开
 我来答
jackwind1987
2013-11-28 · TA获得超过2738个赞
知道大有可为答主
回答量:1268
采纳率:50%
帮助的人:480万
展开全部

三点:

  1. scanf从缓冲区读取:你输入的字符串会保存在一个缓冲区内,scanf在正确的时候是到这个缓冲区中读取字符,并且从缓冲区中删除字符。但如果是%d格式碰到了字母,则不会读取也不会删除,之后ABC还在缓冲区内。

  2. scanf不停止:如果缓冲区内有内容,scanf是不会停下来等你输入的,因为ABC一直在缓冲区内,所以造成了一直不停重复循环。

  3. scanf的返回值:scanf如果成功返回的是输入的个数,当你输入ABC的时候,scanf失败,返回0,则条件一直成立,所以造成了死循环

小坏蛋宽guy
2013-11-28 · TA获得超过300个赞
知道小有建树答主
回答量:239
采纳率:66%
帮助的人:140万
展开全部
scanf()的返回值说明如下:
This functions return the number of input items successfully matched and assigned, which can be fewer than provided for, or even zero in the event of an early matching failure.

大致意思是说返回正确匹配的输入项个数,比如你用%d,那输入数字才是正确匹配,你输入字母a就匹配不上,所以while里的scanf()返回0,while条件为真,到下一次判断时由于上一次输入不匹配,输入缓冲区中的字母a并没有被取走,所以这一次循环还是和上一次一样。如此,死循环。

你把while改了后输入数字,那scanf返回值为1,while条件为真,执行循环内容。下一次循环输入缓冲区的内容已经被上一次取走,这时就继续等待输入。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
与子如初见
2013-11-28 · TA获得超过1638个赞
知道小有建树答主
回答量:1117
采纳率:100%
帮助的人:789万
展开全部
scanf返回成功项的个数,就比如说scanf("%d",&n)则成功后返回值为1,scanf("%d%d",&n,&m)成功则返回值为2.你在理解下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式