程序要求:
1、输入一组字符串作为密码,然后输入“Y”则输出“确认成功”,输入“N”刚输出“确认失败”
2、当输入完字符串后,要对输入缓冲区进行清理。
程序代码:
//头文件 #include <stdio.h> //主函数 int main() { char password[20] = { 0 }; //定义一个char类型数组,用于存放密码 printf("请输入密码:>"); scanf("%s", password); //数组名本身就是一个地址,因此无需取地址符“&” while (1) { printf("请确认密码Y/N:>"); /*清空输入缓冲区*/ int tmp = 0; while ( (tmp = getchar()) != '\n'); /*清空输入缓冲区*/ int ch = getchar(); if ( 'Y' == ch || 'y' == ch) { printf("确认成功!"); break; } else if ('N' == ch || 'n' == ch) { printf("确认失败!"); break; } else { printf("输入错误,请重新输入!\n"); } } return 0; }
程序解析:
1、因为scanf取密码时不会取走'\n'和空格后的字符,如果不对输入缓冲区进行清理,后面的确认密码部分就会自动读取输入缓冲区内的'\n'或空格。因此这里需要使用到getchar对缓冲区进行清理。
2、由于C语言定义了getchar为int类型,因此这里定义清理缓冲区用的变量tmp为int类型。
3、使用一个while循环,判断部分设置为“ ( tmp = getchar() ) != '\n' ”。getchar读取到的值赋给tmp,直到读取到'\n'时,退出while循环。这样就可以达到对缓冲区多余字符的清理。不影响下面确认密码部分变量ch的getchar读取。