经常我们想在屏幕上看一个结果或输入内容的时候,却不等待你输入就结束了,此时就需要刷新输入缓冲区。
题目:先来看一个栗子:实现登录时确认密码,输入Y即确认成功,N表示放弃确认。
int main() { char password[20] = { 0 }; int ch = 0; printf("请输入密码:"); scanf("%s", password); printf("请确认密码(Y/N):"); //fflush(stdin);//第一种方法刷新输入缓冲区 while ((ch = getchar()) != '\n')//第二种方法 { ; } ch = getchar(); if ('Y' == ch) { printf("确认成功\n"); } else if ('N' == ch) { printf("放弃确认\n"); } system("pause"); return 0; }
在scanf输入密码完成之后,scanf拿走从键盘输入到输入缓冲区的123456(假设密码是123456),那么剩下一个\n留在输入缓冲区。这时,你要确认密码输Y/N就不会起作用,因为getchar已经把\n拿走了。
那我们要做的是在确认密码之前刷新缓冲区的值,这里有两种方法。
way1:
C语言中刷新输入缓冲区:(清除输入时垃圾)
函数:fflush(stdin)
头文件:#include <stdio.h>
功能:清空输入缓冲区,为了不影响后面的数据读取例如在读完一个字符串后紧接着又要读取一个字符,此时应该先执行fflush(stdin);)。
way2:
还可以这样实现,一直读取缓冲区的值直到最后一个值 \n,这时,就可以确认密码Y/N就会是有效的输入。
while ((ch = getchar()) != '\n') { ; }