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后都清除输入缓存的话下次执行就还是会多让你输入一个值。总之就是感觉他非要你实际输入的数值个数比理论上多一个不可。 展开
#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后都清除输入缓存的话下次执行就还是会多让你输入一个值。总之就是感觉他非要你实际输入的数值个数比理论上多一个不可。 展开
2个回答
2017-06-16
展开全部
你把scanf语句中的\n去掉就好了。
\n在scanf格式串中不表示等待换行符,而是读取并放弃连续的空白字符;也就是说第三个字符输入时的回车被放弃掉了,直到下一个非空白字符才会匹配到第三个字符;
\n在scanf格式串中不表示等待换行符,而是读取并放弃连续的空白字符;也就是说第三个字符输入时的回车被放弃掉了,直到下一个非空白字符才会匹配到第三个字符;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询