我们先看一组代码:
#include <stdio.h>
int main()
{
char password[20];
printf("请输入密码:>");
scanf("%s", password);
int ch = 0;
printf("请确认(Y/N):");
ch = getchar();
if ('Y' == ch)
printf("确认成功\n");
else
printf("确认失败\n");
return 0;
}
上述代码运行的结果为:
还没输入Y/N,就输出确认失败,这是因为:
我们在使用scanf函数输入时,输入缓冲区的内容除了abcdef外,还有回车键的\n.
电脑将abcdef放到password里,缓冲区还留下了\n.
getchar()——每次只能读取一个字符.
getchar函数发现缓冲区里面有东西,就自动读取了一个字符\n,不用再从键盘输入.
所以,\n不等于Y,所以确认失败.
修改方案1:
#include <stdio.h>
int main()
{
char password[20];
printf("请输入密码:>");
scanf("%s", password);
int ch = 0;
printf("请确认(Y/N):");
getchar();//将\n从缓冲区取走,让缓冲区空出来
ch = getchar();
if ('Y' == ch)
printf("确认成功\n");
else
printf("确认失败\n");
return 0;
}
运行结果为:
上述代码当我们输入这样的密码时:
scanf函数在读取字符串的时候,遇到空格就不再读取
所以在缓冲区留下了123456\n
当getchar()读取时取走了1,剩下23456\n
所以确认失败
修改方案2:
#include <stdio.h>
int main()
{
char password[20];
printf("请输入密码:>");
scanf("%s", password);
int ch = 0;
printf("请确认(Y/N):");
while (getchar() != '\n')//循环读取,直到读到\n,使缓冲区为空
;//空语句
ch = getchar();
if ('Y' == ch)
printf("确认成功\n");
else
printf("确认失败\n");
return 0;
}
代码运行结果为:
这次的分享就到这里,请大家多多点赞支持!