前言
getchar()是stdio.h中的库函数,它的作用是从stdin(缓冲区)中读入一个字符,返回的是ASCII码,因此,只要是ASCII表里有的,它都能
思想
在使用scanf读取键盘输入时,并不是直接读取键盘上我们输入了什么,而是从stdin里读取,而scanf 在stdin里遇到以下情况时停止读取:
(1)遇空格、“回车”、“跳格”键;
(2)遇宽度结束;
(3)遇非法输入;那么,如果需要将 "\n"等字符输入进字符串中,可用getchar函数,逐个识别缓冲区的内容,再将其写入字符串数组中。
若再连续使用scanf函数时,为了不影响下一次输入的内容的识别,可以使用循环,循环内多次使用getchar函数将缓冲区里的 "\n" 以及不需要的内容进行清除。
实例
模拟用户设定密码时的场景,输入密码,之后输入 Y/N 确定是否设定密码。
#include <stdio.h>
int main()
{
int password = 0;
printf("请输入密码:");
scanf("%d",&password);
//定义一个tmp来存储缓冲区里的内容,起到清除缓冲区内容的作用
int tmp = 0; // 因为 getchar() 返回的是 ASCII 码,故用int类型的变量来存储
while ((tmp = getchar()) != '\n')
{
;
}
//当while 条件满足时,代表缓冲区里还有内容,继续清理;
//当while条件不满足时,则表示清理到剩下"\n",而缓冲区里最后一个内容"\n" 则在运行条件时,被变量tmp带走了
printf("请确认密码(Y/N):");
int ch = getchar(); // 因为 getchar() 返回的是 ASCII 码,故用int类型的变量来存储
if (ch == 'Y') //用'Y' 而不是 "Y" 是因为 getchar 返回的是 int 类型
printf("确认成功\n");
else
printf("确认失败\n");
return 0;
}