getchar---解析

关于getchar基本知识

怎么正确使用getchar

getchar有什么注意点

getcahr分析详解

  • 关于getchar基本知识
    • 怎么正确使用getchar
      • getchar有什么注意点
  • 1.getcahr的功能
    • 2.getcahr的使用
    • 字母大小写转换---例题
      • 解析:知识点---缓冲区缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内冲空间预留了一定的储存空间,这些储存空间用来缓冲输入或者输出的数据,这部分预留的空间就叫做缓冲区。这里一般操作系统上会讲,缓冲区是一块内存区,它在输入输出设备和cpu之间,用来缓存数据。他是低速的输入输出设备和高速的cpu能够协调共工作,避免低速的输入和输出设备占用cpu。
      • 解决方法
      • getchar注意事项

1.getcahr的功能

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

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

2.getcahr的使用

如果要求你一次多组输入,该怎么操作呢?你肯定会想到用循环,循环肯定是必须的,还要注意循环的条件呢。getchar---解析_第1张图片

字母大小写转换—例题

要求实现字母的大小写转换。多组输入输出。
getchar---解析_第2张图片

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

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

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

getchar---解析_第7张图片

解决方法

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')
{
	;
}`
这样也可以喔

getchar---解析_第8张图片

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

你可能感兴趣的:(c语言)