本文已参与「新人创作礼」活动,一起开启掘金创作之路。
getchar(输入字符、获取一个字符)
字符输入函数,没有参数,从输入缓冲区里面读取一个字符 - 一次只能读取一个字符
getchar 读取失败时返回EOF,EOF的值为-1,若用char修饰ch,空间不足以装下整型EOF,因此这里我们用int
对于 scanf 函数,'\n' 会触发 scanf 读取输入缓冲区的内容,但遇到 '\n' 或空格 ' ' 会停止读取,而 getchar 会直接读取 '\n' 和空格
putchar(输出一个字符)
与printf相似,但一次只能操作一个字符
基本用法
int main()
{
int ch = getchar();//与scanf()相似,但一次只能操作一个字符
//getchar 读取失败时返回EOF,EOF的值为-1,若用char修饰ch,空间不足以装下整型EOF,因此这里我们用int
putchar(ch);//与printf相似,但一次只能操作一个字符
return 0;
}
清理缓冲器
失败原因:
为了使程序运行我们敲了回车,scanf在输入缓冲区拿走了输入的密码,还剩了\n(回车键),而这个\n被getchar拿走了,并且\n!=“Y",执行else语句
解决方案(把\n也拿走):
int main()
{
char input[20] = {0};
printf("请输入密码:>");
scanf("%s", input);//数组名本身就是地址,不用&
//scanf读取字符串时,遇到空格就结束了
//getchar();//拿走\n
//如果有多个不需要的符号(例如空格)就要用getchar()拿走多个字符,于是写出以下循环
//清理缓冲区
int tmp = 0;
while ((tmp = getchar()) != '\n')//判断的同时拿走不需要的字符
{
;//空语句
}
printf("请确认密码(Y/N):>");
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
只打印0到9数字字符
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)//要加()否则顺序不对
{
if (ch < '0' || ch>'9')
continue;//跳过putchar
putchar(ch);
}
return 0;
}