c语言scanf首次执行时会多输入一个值,之后就正常了,为什么会有这个BUG?

如以下语句:#include"stdio.h"voidmain(){inta,b,c,i;for(i=0;i<100;i++){scanf("%d\n",&a);scan... 如以下语句:
#include "stdio.h"
void main()
{
int a,b,c,i;
for(i=0;i<100;i++)
{
scanf("%d\n",&a);
scanf("%d\n",&b);
scanf("%d\n",&c);
printf("a is %d\n",a);
printf("b is %d\n",b);
printf("c is %d\n",c);

}
正常的状况应该是你先输入三个数,之后电脑再把你输的三个数输出,重复一百次。
可在我电脑生的执行情况却是,第一次循环执行时要你输入四个值程序才向下运行,第一次输出了我输入的前三个数。循环第二次执行时输入值的个数就正常了,是三个,可输出的a,b,c分别是我第一次输入的那第四个数和第二次输入的前两个。以此类推,因为第一次循环时莫名其妙的多执行了一次输入语句,向下的赋值全部被打乱了。

看不懂的话我举个例子吧:
程序开始执行后我输入了1,2,3三个数,可他并没有什么反应,于是我又输入了4,然后就有反应了,显示了a is 1
b is 2
c is 3
三行输出结果。然后进入了第二次循环。我又输入了三个数,5,6,7,这次有反应,但输出的是:a is 4
b is 5
c is 6
而不是我输入的5 6 7
之后进入第三次循环,我输入8,9,10,同样可以向下进行,但输出的是
a is 7
b is 8
c is 9
以此类推。第一次多输入了一个值,之后这个值向下顺延,把其后的每个值都向下推了一步。
请问为啥会这样啊?
我试了一上午,用了各种简单的小程序,不是光循环,在我电脑上只要是scanf语句都成这样了,一定会多出一个值来。我本想趁放假学点简单的编程,结果就这样scanf语句直接瘫痪了。我现在寸步难行啊。求大神指教。
试过fflush(stdin);语句,如果每次执行完scanf后都清除输入缓存的话下次执行就还是会多让你输入一个值。总之就是感觉他非要你实际输入的数值个数比理论上多一个不可。
展开
 我来答
My_Persistence
2017-06-16 · TA获得超过3465个赞
知道大有可为答主
回答量:1201
采纳率:81%
帮助的人:414万
展开全部
  • scanf中\n问题
    scanf("%d\n",&num);
    scanf函数的第一个参数指定了后面变量读取的格式,这样写的话会按照 :
    数字 回车
    的格式读取,读到回车之后会继续读下一行,如果缓冲区没有东西scanf就会阻塞在那里,直到用户有输入以至于有时候会遇到再输入一行才能有返回的情况。

  • 我觉得你可以去了解下scanf()函数的用法和原理:你的程序执行到scanf()时,会从你的缓冲区读东西,如果缓冲区是空的,就阻塞住,等待你从键盘输入。

匿名用户
2017-06-16
展开全部
你把scanf语句中的\n去掉就好了。
\n在scanf格式串中不表示等待换行符,而是读取并放弃连续的空白字符;也就是说第三个字符输入时的回车被放弃掉了,直到下一个非空白字符才会匹配到第三个字符;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式