getchar()函数介绍
accommodate 适应
举例一:输入密码之后,确认密码。 (并非判断密码是否正确)
#include<stdio.h>
int main()
{
char password[20] = { 0 };
printf("请输入密码:\n");
scanf("%s", password);
int tmp = 0;
//getchar(); // 123456 Y 也可以,此getchar用来把空格消除掉
while ((tmp = getchar()) != '\n')
;
int ch = 0;
printf("请确认密码:(Y/N)\n");
ch = getchar();
if (ch == 'Y')
printf("确认成功\n");
else
printf("确认失败失败\n");
return 0;
}
上图为当输入密码与确认密码之间不做getchar处理的话,所发生的。可以看到,在输入密码后,并没有确认密码这一流程。
原因是:输入123456回车后,回车被转换为\n存储入缓冲区,被下面的ch读走,!='Y',所以直接错误。
解决方法就是中间加一个getchar,用于把\n读走。
但是仅加一个getchar并不完美,因为如果输入 123456 zzzz 后面的数据就无法全部处理掉(scanf函数只能读取空格之前的数据,空格会作为终止标志),所以就有了最上面的循环getchar。可以把" zzzz\n"全部处理掉(此处不研究如果在输入密码时想要输入space怎么办)
举例二:
输入z\n 打印出z\n 输入a\n 输出a\n 输入\n 打印\n
在输入a之后,要输入回车,才可以让a被读取,但是此时\n也会进入缓冲区,接着也会被getchar读取到,并putchar
如果加一个\n判断,就会让\n无法打印出来
------------------------------------------------------------------------------------------------------------
上面的就算结束了,现在还有个疑问即做OJ题时,有关数据读入的问题。后面有进展了再更新