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 展开
int main(void)
{
int sum;
while(scanf(“%d",&sum)!=1)
printf("ABC\n");
return 0;
}
运行后输入字符a,为什么会一直重复输出ABC
而把循环改成while(scanf(“%d",&sum)==1)
输入数字只输出一次ABC 展开
3个回答
展开全部
三点:
scanf从缓冲区读取:你输入的字符串会保存在一个缓冲区内,scanf在正确的时候是到这个缓冲区中读取字符,并且从缓冲区中删除字符。但如果是%d格式碰到了字母,则不会读取也不会删除,之后ABC还在缓冲区内碰宏改。
scanf不停止:如果缓冲区内有内容,scanf是笑判不会停下来等你输入的,因为ABC一直在缓冲区内,所以造成了一直不停重复循环。
scanf的返绝迹回值:scanf如果成功返回的是输入的个数,当你输入ABC的时候,scanf失败,返回0,则条件一直成立,所以造成了死循环
展开全部
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条件为真,执行循环内容。下一次循环输入缓冲区的内容已经被上一次取茄知走,这时就继续等待输入。
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条件为真,执行循环内容。下一次循环输入缓冲区的内容已经被上一次取茄知走,这时就继续等待输入。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
scanf返回成功项的激并个数,就比如并判说绝铅改scanf("%d",&n)则成功后返回值为1,scanf("%d%d",&n,&m)成功则返回值为2.你在理解下
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询