程序要求:
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读取。