#include<stdio.h>
int main()
{
int password[20]={0};//这里的password是一个数组后面会具体学到的(需要指明的是数组本身就是一个地址)
printf("请输入密码:");
scanf("%s",password);//这里的password为什么没有加取址符&,是因为数组名本身就是地址
printf("请确认密码(Y/N)");
int ch=getchar();
if(ch=='Y')
{
printf("确认成功!");
}
else
{
printf("确认失败!");
}
return 0;
}
输出结果如下:
此时你会发现代码出现问题,问腿就出在getchar和scanf从缓冲区中读取元素
当输入123456后按下 回车键,缓冲区中的数据就如途中所示,scanf读取了其中的123456,剩下一个'\n',轮到getchar从缓冲区中取值直接读取到了'\n',从这里就出现了错误
如何调整呢?
直接介入一个新的getchar读取'\n',这样就等于清空了缓冲区
#include<stdio.h>
int main()
{
int password[20]={0};//这里的password是一个数组后面会具体学到的(需要指明的是数组本省就是一个地址)
printf("请输入密码:");
scanf("%s",password);//这里的password为什么没有加取址符&,是因为数组名本身就是地址
printf("请确认密码(Y/N)");
getchar();//新增用来清空缓冲区
int ch=getchar();
if(ch=='Y')
{
printf("确认成功!");
}
else
{
printf("确认失败!");
}
return 0;
}
输出结果如下:
操作成功!