当第一次读取数据操作进行后,我们用回车来结束输入。
例如scanf(“%s”,&a)
输入abcdef后回车结束。
这时候输入的栈的缓存中实际上是这样子的:
a | b | c | d | e | f | \n(回车)|
前面的abcdef读入之后输入栈中只剩下回车(回车也算字符)。
\n |
这个时候假如scanf后面的第一次输入操作是getchar() 或者scanf(“%c“,&b),这时候你要注意了,在你在黑窗口中输入数据之前,getchar(),或者scanf,已经读入了输入栈中的 '\n' 。
这时栈为空,然后再进行你本以为是getchar(),或者scanf 的输入操作,其实并不是,
输入早就悄悄地结束了!
如果后续依然有输入操作,将会引起一系列错误!但是代码看着并没有毛病,让人摸不着头脑。。。。
(假如用gets()来读入字符串,就不会出现遗留的 '\n' 带来的问题)
那么怎么解决这个问题呢?
只需要把 '\n' 给 “吃掉” 即可。
下面附上相关操作:
1.在scanf()中使用’\n’屏蔽回车符号。
scanf("%d\n",&n); //使用’\n’过滤回车
scanf("%c",&c);
2.在scanf()格式串最前面添加空格,屏蔽回车字符
scanf("%d",&n);
scanf(" %c",&c); //%c前面加空格,过滤回车
3.在接收字符前,使用getchar()来读取一次回车符号
scanf("%d",&n);
getchar(); //专门用来读取上次输入的回车符号
scanf("%c",&c);
4.在接收字符前,使用fflush()清空输入流中缓冲区中的内容
scanf("%d",&n)
fflush(stdin); //清空输入流缓冲区的字符,注意必须引入#include <stdlib.h>头文件
scanf("%c",&c);