先来看一眼来自getchar - C++ Reference 的getchar的详细
一.函数声明
int getchar(void)
二.函数返回值
从上面的解析中不难看出,该函数以无符号 char 强制转换为 int 的形式返回读取的字符,如果到达文件末尾或发生读错误,则返回 EOF(EOF在vs2019集成开发环境中值相当于-1)。
三.一些例子和用法
我们来通过上面这个例子来分析一下getchar的工作过程
回车的本质是\n这个转义字符,从键盘输入了A然后回车相当于向缓冲区输入了A和\n,在while循环下,getchar先读入了A赋值给ch并打印,然后又读入了\n所以出现了换行的情况。由此可以引导出下面的场景。
当运用scanf输入password的时候,因为最后要点回车确认,相当于我们的缓冲区里有一个\n的存在,getchar函数发现缓冲区有东西,便直接取走赋值给了ch,所以还没有等我们输入,就确认失败了,因为ch的值为\n。
解决方法也很简单,用getchar函数吸收多余的字符,我们就能正常按照自己的意愿赋值给ch了。