前言
在用scanf输入字符时,scanf会把回车符\n当成你要输入的一个字符,从而导致了字符的丢失。
提示:以下是本篇文章正文内容,下面案例可供参考
一、实例
char a;
scanf("%c",&a);
char b;
scanf("%c",&b)
如上面的代码,我们期待它读到的是我们输入的字符a,b。当实际上当我们输入字符a敲完回车后,我们会发现程序神奇地跳过给scanf输入b的环节,直接开始执行我们之后的代码了。难道我敲代码已经达到人码合一的境界了吗? 当然不是。我们键盘敲一下回车相当与输入了\n(可能还有\r)而正是\n被c语言当成了你要输入的字符,直接把\n赋给了变量b。
二、解决方法
1.getchar()
代码如下(示例):
char a;
scanf("%c",&a);
getchar();
char b;
scanf("%c",&b)
在第一个scanf后面加上一句getchar()。这句代码的意思是从缓存区(这里涉及计算机组成)里获取一个字符,但是我们有没有把获得的那个字符赋给一个变量储存起来,所以这个字符又被丢弃了。所以我们可以通过这句代码来把键盘每次输入的回车也就是\n,丢掉。
2.fflush()
char a;
scanf("%c",&a);
fflush();
char b;
scanf("%c",&b)
道理和getchar差不多。不过这次我们不取了,直接丢掉。我们把缓存区的内容清理。
3./n
char a;
scanf("%c\n",&a);
char b;
scanf("%c",&b)
我们也可以把在第一个scanf里加上\n。c语言把缓存区中的那个\n当成一个输入格式,而不是一个赋给b的字符。
总结
在使用scanf输入字符时要格外注意。
题外话,这是我第一篇blog,希望我能在学习的道路上不断前行。