如题
嗐,好多天没有写了,今天记录下吧~,挺有意思的,但原谅本人非计算机专业,不知道作何解释
先看一段代码:
//先读入整数型,再读入字符型
int a,b;//整数型
printf("输入两个整数:\n");
scanf("%d%d",&a,&b);
printf("a=%d,b=%d\n",a,b);
char c;//字符型
scanf("%c",&c);
printf("%d\n",c);
然后看下运行结果:
注意:c在这我用的是%d的输出格式,c原本应该是一个换行符“\n”
上面,我们只输入了两个整数1、2,结果却输出了三个值,这是为何?
没错,原因在这里:
在我们输入两个整数1 、2后,同时按下了一个换行符。
此时1 和 2分别赋给了a、b,但是换行符不会自动消失,它还停留在缓冲区内,所以当下一个变量需要进行用户输入赋值时,这个换行符便会从缓冲区里出来赋给这个变量(也就是这里的c)。
什么是缓冲区?
接触过语言的人,可能多多少少都知道些吧,我对缓冲区的理解:
当你输入的数值个数 多于 当前要赋值的变量个数时,多余的数值便会暂时存储在缓冲区内。所以在进行下一次赋值时,如果缓冲区内有值,系统不等你输入,就优先使用缓冲区里的值了。(具体是什么可以去搜下)
没错,上面这个东西大部分人都知道,所以重点不是它,只是要用它引出下文
老规矩:先来看一段代码:
//先读入字符型,再读入整数型
char A,B;//字符型
printf("输入两个字符型数据:\n");
scanf("%c%c",&A,&B);
printf("A=%c,B=%c\n",A,B);
int C;//整数型
scanf("%d",&C);
printf("%d\n",C);
没展示结果前,大家不妨猜一下会出现什么结果?
有没有和我一样的答案?
例如输入AB(换行符)
猜想输出:A=A B=B C=10
一起看下运行结果吧:
是的,没错,上面还没有运行结束,系统还在等着我输入C的值
为什么呢?,换行符呢?
我也有大大的疑问,换行符呢?
不过该总结还是总结:
先输入整数型,再输入字符型时,后续字符会把前面残留的换行符也读入
先输入字符型,再输入整数型时,换行符不会读入,该怎样输入就怎样输入
其实记忆也好记,因为换行符本身就是一个字符型数据,所以第一种情况会将其读入。
有知道第二种情况中换行符去哪里的小伙伴可以评论区分享。(* ̄︶ ̄)