C语言的读取是通过缓冲区的形式,即键盘-->缓冲区-->读取。故存在清理缓冲区以达到目的的问题 。
int main(){char password[20] = { 0 };printf("请输入密码:");scanf("%s",password);//scanf和getchar从缓冲区拿数据,缓冲区的数据由键盘引入,输入(1234)后的回车'n'会留在缓冲区printf("请确认密码(y/n):");//所以ch = getchar会读取‘n’导致直接显示确认失败//此时需要处理缓冲区,加上一行语句“getchar();”后即可。相当于读取遗留的‘n’但不做操作,后续再由键盘输入y字符来确认//这个方法如果遇到输入中存在空格(123 abc)的话,scanf只能读取空格前的字符,会在缓冲区留下( abc)所以还是会出错//故采取while循环进行清理多个字符char tem;while(tem = getchar()!='n')//输入不是‘n’时,进行读取操作,以消耗缓冲区多余的数据{;}int ch = getchar(); if (ch == 'y')printf("确认成功n");elseprintf("确认失败n");return 0;}
第一种方法是通过getchar(); 语句来读取并消耗掉缓冲区字符,但是只能消耗一个
第二种方法是使用while循环清理多个缓冲区字符