按照代码逻辑,在提示输入密码“123456”之后,就应该弹出“请确认(Y/N)”
这是怎末回事呢?
可以在调试之后打开监视,在监视窗口中,查看ret中的值。其值为’10’
用代码来解释解释为什莫没有达到自己想要的结果。
int main()
{
int ret = 0;
char password[20] = { 0
};
printf("请输入密码:>");//输入“123456回车”
scanf("%s",password);//输入函数,在输入缓冲区获取数据,读走“123456”,还剩下“\n”
printf("确认密码(Y/N)");
ret
= getchar();//输入函数,读走了缓冲区的“\n”,不再等待。
if (ret == 'Y')//”\n!=’’Y”
{
printf("确认成功\n");
}
else
{
printf("确认失败");//就输出呵呵了
}
return 0;
}
看到这里大家就会知道了,监视里面的“10”其实就是ASCII表里面的“\n”.就是我们在输入密码是敲进去的。
怎样解决这个问题呢?
Getchar关键字来读取“\n”,如下图操作。
那么问题来了,要是输入的是“12345 ABCD”这样的密码,这个输出结果又是怎样的呢?
这是因为scanf() 自会把空格前面的“123456”读走,用函数来标注看
int main()
{
int ret = 0;
char password[20] = { 0
};
printf("请输入密码:>"); //输入123456 ABCD
scanf("%s",password);//读走“123456”
getchar();//读走‘\n’
printf("确认密码(Y/N)");
ret
= getchar();//读走了A
if (ret == 'Y')//‘A’!=‘Y’
{
printf("确认成功\n");
}
else
{
printf("确认失败");
}
return 0;
}
怎莫解决这个问题呢?
123456 ABCD\N
用循环一直用getchar()去读字符,直至读取到\n即可。