C语⾔中getchar的⽤法以及实例解析
⽬录
getchar解析
⼀、getchar的返回类型及作⽤机制
⼆、根据⼀段代码初步了解
三、实例(“输⼊密码”)进⼀步了解
1、代码达不到理想效果
2、输⼊的密码中有空格
总结
getchar解析
⼀、getchar的返回类型及作⽤机制
getchar——读取字符的函数
int getchar(void)
返回类型为int,参数为void.
有⼈可能会有疑惑,getchar既然是读取字符的,为什么返回类型是int呢?
1、getchar其实返回的是字符的ASCII码值(整数)。
2、getchar在读取结束或者失败的时候,会返回EOF。
EOF意思是end of file,本质上是-1.
⼆、根据⼀段代码初步了解
下⾯我们⼀起来看看下⾯这段代码什么意思
#include<stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
意思是
getchar先读取⼀个字符放到ch⾥⾯去,如果这个字符不等于EOF,就进⼊循环,打印这个字符。当getchar读到⽂件末尾或者结束时,它会返回⼀个EOF,此时结束循环。
我们来运⾏试⼀下
输⼊A,输出A;输⼊b,输出b…
当我们想要结束时,输⼊ctrl+Z,再按回车即可。
注意,如果上⾯的代码不⽤while循环的话,输⼊123,putchar()只会输出1。因为⼀个getchar⼀次只能读取⼀个字符。
三、实例(“输⼊密码”)进⼀步了解
1、代码达不到理想效果
我们再来看看下⾯这段代码
#include<stdio.h>
int main()
{
char password[20] = {0};
printf("请输⼊密码:>");
scanf("%s", password);
printf("请确认密码(Y/N):>");
int ch = getchar();
c语言char的用法if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
按理说,我们是想要输⼊密码,然后再输⼊N或者Y,根据我们输⼊的是N还是Y打印“确认成功”或“确认失败”。
我们来运⾏⼀下,看看是否是这样
可以看到,我们还没有输⼊Y或N,他就⽴马跳出来了⼀个“确认失败”为什么会是这样呢?
(1)原理详解
我们来看看它其中的原理:
scanf和getchar都是输⼊函数,它们都是从键盘上来读取我们的数据,但它们不是直接从键盘上来读取我们的数据。它们和键盘之间有⼀个区域叫缓冲区。
输⼊函数先来看缓冲区中是否有数据,如果有,它直接就拿⾛了,不需要从键盘输⼊,如果缓冲区什么都没有,则需要从键盘输⼊,再拿⾛。
明⽩这个道理后,我们回到上⾯那串代码。
最开始缓冲区⾥没有东西,所以我们这⾏代码
scanf("%s", password);
就是从键盘输⼊密码,我们输⼊123456。为了让123456放进去,我们还敲了⼀个回车,所以缓冲区⾥为
123456\n
接下来就是scanf来读缓冲区⾥的字符串了,scanf读取的⽅式是读取\n之前的内容,所以读取的是123456.
printf("请确认密码(Y/N):>");后,就是下⾯这⾏代码:
int ch = getchar();
getchar⽤来接收字符,
getchar看到缓冲区中有数据(\n),直接取⾛,不需要从键盘输⼊。⾃然也就出现了我们上⾯运⾏结果的那⼀幕:还没输⼊N 或Y,就⽴马跳出“确认失败”了。
(2)解决措施
那么我们怎么解决这个问题呢?
很⾃然就能想到需要先把缓冲区⾥清空。
那我们就在前⾯加⼀个getchar把缓冲区中的“\n”给清理掉。
即代码变为
#include<stdio.h>
int main()
{
char password[20] = {0};
printf("请输⼊密码:>");
scanf("%s", password);
getchar();//把缓冲区中的\n清理掉
printf("请确认密码(Y/N):>");
int ch = getchar();
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
运⾏⼀下即可发现,现在能够得到我们的理想结果。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。