这二者都是输入函数,输入数据要存放输入缓存区域,屏幕字符后按下回车才可被scanf()读取,并且该读取的值为回车(\n)之前数据。而getchar则没有此限制,在EOF之前均可被读取。示例如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int ret = 0;
/*char in[20] = { 0 };*/
int ch = 0;
char password[20] = { 0 };
printf("输入密码:\n");
scanf("%s", password);
printf("确认密码(Y/N):");
ret = getchar();
if (ret == 'Y')
{
printf("密码正确\n");
}
else
{
printf("密码错误\n");
}
}
主要原因则为在scanf()读取时即13+回车,13被scanf()读取,回车被getchar()读取。
修改:则把scanf()之后添加getchar()把该回车读走。
但是如果输入“123 123”scanf()只能读取空格之前字符,读取之后还剩下 空格123,则上面代码运行后依然为密码错误。为解决该问题,则把所有字符获取完即可。