关于getchar基本知识
怎么正确使用getchar
getchar有什么注意点
getcahr分析详解
1.getcahr的功能
- 首先它是个字符输入函数,是专门用来获取字符的。
- getchar它的参数是什么,返回值又是什么?
这里表明getchar返回的是一个整形数字,但getchar是用来接收字符的,为什么会返回整形呢?
参数是void,也就是可以不用写。
getchar库函数所需要引用的头文件就是<stdio.h>
这些函数中的每一个都返回字符读取。为了指示读取错误或文件结束条件,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://ucc.alicdn.com/images/user-upload-01/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') { ; }` 这样也可以喔
又学会了一个知识点!是不是很高兴呀,嘻嘻。