getchar---解析

关于getchar基本知识

怎么正确使用getchar

getchar有什么注意点

1.getcahr的功能

  1. 首先它是个字符输入函数,是专门用来获取字符的。
  2. getchar它的参数是什么,返回值又是什么?
    在这里插入图片描述
    这里表明getchar返回的是一个整形数字,但getchar是用来接收字符的,为什么会返回整形呢?

参数是void,也就是可以不用写。
在这里插入图片描述getchar库函数所需要引用的头文件就是<stdio.h>在这里插入图片描述
这些函数中的每一个都返回字符读取。为了指示读取错误或文件结束条件,getc 和 getchar 返回 EOF,getwc 和 getwchar 返回 WEOF。对于 getc 和 getchar,请使用 ferror 或 feof 来检查错误或文件结尾。
这些函数中的每一个都返回字符读取。为了指示读取错误或文件结束条件,getc 和 getchar 返回 EOF,getwc 和 getwchar 返回 WEOF。对于 getc 和 getchar,请使用 ferror 或 feof 来检查错误或文件结尾。

2.getcahr的使用

如果要求你一次多组输入,该怎么操作呢?你肯定会想到用循环,循环肯定是必须的,还要注意循环的条件呢。在这里插入图片描述

字母大小写转换—例题

要求实现字母的大小写转换。多组输入输出。
在这里插入图片描述

在这里插入图片描述
正常思路就是大写字母与小写字母之间ASCII码值差32,所以ch+32就是转化后的小写字母。
要求输入换行。
但打印的结果却很奇怪,输入A却打印出来a和 * 输入B却打印出来b和 *,这是为什么呢?
在这里插入图片描述

解析:知识点—缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内冲空间预留了一定的储存空间,这些储存空间用来缓冲输入或者输出的数据,这部分预留的空间就叫做缓冲区。这里一般操作系统上会讲,缓冲区是一块内存区,它在输入输出设备和cpu之间,用来缓存数据。他是低速的输入输出设备和高速的cpu能够协调共工作,避免低速的输入和输出设备占用cpu。

从网上查到的一个名词叫行缓冲:当输入和输出中遇到换行符,执行真正的I/O操作。这时,我们输入的字符优先存放在缓冲区,当按下回车键换行时,才进行实际的I/O操作。其经典的标准输入(stdin)和标准输出(stdout)。这个意思也就是,一般我们从电脑端输入然后getchar要想接收字符必须要通过一个叫缓冲区的地方(这个地方用来暂放数据)来接收。
这是因为在输入字符串时,并不是一个一个输入,在我们按下键盘后字符会存放在缓冲区中,等待回车键入,而按下回车相当于键入\n,虽然不会存储到数组中,但仍在缓冲区
,接下来理解getchar会读取\n并保存,在这里插入图片描述
输入A后需要按下enter建才能有效,而按完enter相当于一次换行,一开始缓冲区里面存放着A\n,然后getchar接收\n之前的字符A ,而\n还存放在缓冲区内,而下一次,就不用手动输入了,缓冲区内还有数据存着,自然getchar将\n接收,而putchar也就获取了\n而相对应的+32就是*了。
在这里插入图片描述
![在这里插入图片描述](https://img-blog.csdnimg.cn/94e93418fd0342488a51953ebeed0491.png

在这里插入图片描述

解决方法

1. 前面有读数据操作,现在要执行读字符操作,则可用getchar()来吃掉前面的回车确认。

int main()
{
    char ch = 0;
    while ((ch = getchar()) != EOF)//EOF意为-1。本语句即只要输入项是字符即可打印
    {
        //因为回车也算一个字符,所以在输入第一个字符换行后,getchar会读取换行的回车键
        //换行的回车被读取,若防止回车被读取,可在其前面多读取一次消耗回车
        getchar();//吃掉回车确认符
        putchar(ch + 32);
        printf("\n");
    }
    return 0;

}

getchar注意事项

1.清除缓冲区.

	do {
			scanf("%c",&c);
		}
		while(c!='\n');	// 清除缓存区,确保下次scanf的正确读取

可以通过这样来清除缓冲区,来确保下次scanf()的正确读取。
2
.`//把缓冲区中的内容全读走

while ( getchar() != '\n')
{
	;
}`
这样也可以喔

请添加图片描述

又学会了一个知识点!是不是很高兴呀,嘻嘻。

  • 24
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小陶来咯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值