getchar不是输入一个字符吗?怎么有时候看到可以输一串啊?
getchar就是 输入一个字符,你看到输入一串的是 gets 吧,或者 使用循环来调用 getchar函数的吧
不知道你这个问题是否已经解决, 如果还没有解决的话:讲了这么多可能很多人都不明白这么一个代码有什么用呢?其实在很多地方都会用到,比如模拟用户登入场景。但是写这个代码的时候就要注意getchar的读取规则
代码如下(示例)
#include<stdio.h>
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
printf("请确认密码(Y/N):>");
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功");
}
else
{
printf("确认失败");
}
return 0;
}
代码运行结果
在这里我们看到都还没确认就直接输出确认失败,到这里大家应该都明白了是什么问题吧?没错就是\n的问题,这里getchar发现缓冲区里面还有一个\n就没等我们输入直接把\n读走
那应该如何解决呢?
代码如下(示例)
#include<stdio.h>
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
getchar();
printf("请确认密码(Y/N):>");
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功");
}
else
{
printf("确认失败");
}
return 0;
}
代码运行结果
接下来我们再想大家思考一个问题,当密码里面有空格的时候还会确认成功吗?
没错还是会失败,这又是为什么呢?因为数组把空格前面的123456读走了,但是缓冲区里还剩下空格abcdef\n所以getchar还是会读取缓冲区里面的东西
那该怎么解决呢?
代码如下(示例)
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
int temp = 0;
while((temp=getchar())!='\n');
{
;
}
printf("请确认密码(Y/N):>");
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功");
}
else
{
printf("确认失败");
}
return 0;
}
代码运行结果