- 再简单程序中,通常来说,我们一般只会用到一个scanf函数,但是当我们用到两个scanf函数的时候就会发现一个问题。
-
#include <stdio.h> int main(){ char a; scanf("%c",&a); while(a!='#') { ... ... ... ... scanf("%c",&a); } return 0; }
-
如果像这样类似的程序当中,你在调试的过程当中,你会发现你输入的第二个scanf函数,你并没有输入字符就进入下一布当中了,是因为你在第一个scanf的地方,输入完了一个字符,你会摁下回车,使得程序进入下一步骤,但是这个回车会被储存在输入缓冲区内,并不是消失了,而是在你下一个scanf函数的输入时候从中调用出来,导致你第二个scanf无论输入的是什么,他都会将一个回车当作你输入的下一个字符。
-
那么怎么解决有四种解决办法:
-
1.
setbuf(stdin,NULL);//清空输入缓冲区
-
2.
scanf("%*c");//忽略掉上一个输入的字符 //在这里来说就是上一个你输入的scanf函数后面输入的回车被忽略了。
-
3.
fflush(stdin)//手动清空缓冲区
- 4.
while(getchar()!='\n'); //也可以叫做,清空之前不为回车的输入。可以做到清空一部分的缓冲区。
-
这样问题就解决了。
-
但是如果你要输入多个scanf函数,你需要多次用到%*c,而不是一次就能解决。