C语言吃透getchar()函数,超详细解析!!!

Posted  Do

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言吃透getchar()函数,超详细解析!!!相关的知识,希望对你有一定的参考价值。

目录

get char()函数用法

get char()语法

get char()函数返回值

代码示例:

getchar()函数返回原理

getchar()函数的作用

代码示例:

知识拓展

getch()函数

getche()函数

putchar()函数

重点总结


get char()函数用法

get char()语法

int get char(void)

该函数无参数,定义在头文件中,使用时需调用头文件<stdio.h>

get char()函数返回值

C标准库提供的输入输出模型,都是按照字符流的方式处理

getchar()是最简单的一次读一个字符的函数,每次调用时从文本流中读入下一个字符,并将其ASCII码值作为结果值返回。

但是,注意的是,返回值是int型!即:

int c;
c = getchar();

但为什么不是char型呢??

因为,在没有输入或者输入字符有错的时候,getchar()函数将返回一个特殊值,这个特殊值与任何实际字符都不同,称为EOF(end of file,文件结束),EOF是定义在头文件 中的。

代码示例:

int main()
{
    int ch=0;
    while((ch=get char())!EOF)
    {
      put char(ch);
    }
}

运行结果:

根据结果我们可以知道,只要没有输入ctrl+z(中断读取命令),循环就会一直下去,只有遇到EOF读取才结束。

getchar()函数返回原理

当程序调用getchar()时,程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止(回车字符也放在缓冲区中)。

当用户键入回车之后,getchar()才开始从输入流中每次读入一个字符,getchar()函数的返回值是用户输入的第一个字符的ASCII码,如出错返回EOF。如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,,待后续getchar()调用读取。也就是说,后续的getchar()调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。

 


getchar()函数的作用

从标准输入流只读取一个字符(包括空格、回车、tab),读到回车符('\\n')时退出,键盘输入的字符都存到缓冲区内,一旦键入回车,getchar就进入缓冲区读取字符,一次只返回第一个字符作为getchar函数的值,如果有循环或足够多的getchar语句,就会依次读出缓冲区内的所有字符直到'\\n'.要理解这一点,之所以你输入的一系列字符被依次读出来,是因为循环的作用使得反复利用getchar在缓冲区里读取字符,而不是getchar可以读取多个字符,事实上getchar每次只能读取一个字符.如果需要取消'\\n'的影响,可以用getchar()来清除,如:while((c=getchar())!='\\n'),这里getchar();只是取得了'\\n'但是并没有赋给任何字符变量,所以不会有影响,相当于清除了这个字符

代码示例:

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
	char password[20] = { 0 };
	printf("请输入密码:");
	scanf("%s", password);
	printf("请确认密码:Y/N\\n");
	int tmp = 0;
	while ((tmp = getchar()) != '\\n')//一个getchar只能读取一个字符,但是输入的是字符串,要使密 
                                     //码输入正确就要使用循环清理缓冲区的多余字符
		                             
	{
		;//当没有读取到\\n时,前面的内容都扔了

	}
	
	int ch = getchar();
	if (ch == 'Y')
		printf("确认成功");
	else

		printf("确认失败");

}

知识拓展

getch()函数

getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回,getch返回值是用户输入的ASCⅡ码,出错返回-1。输入的字符不会回显在屏幕上.getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行。

getch()是非缓冲输入函数,就是不能用getch()来接受缓冲区已存在的字符。

getche()函数

这个函数与前两上类似,功能也相近,都是输入一个字符,返回值同样是输入字符的ASCII码,但不同的是,此函数在输入后立即从控制台取字符不以回车为结束(带回显)

用getche()或getch()代替getchar(),其作用是从键盘读入一个字符(不用按回车),注意要包含头文件<conio.h>

putchar()函数

(1)输出:putchar函数只能用于单个字符的输出,向终端输出一个字符,且一次只能输出一个字符。

(2)格式:对于变量来说,格式为:putchar(ch);对于常量来说,格式为:putchar('ch'),对于转义字符来说,格式为:putchar('\\n')。


重点总结

  • getchar()函数是字符读取函数,并且一次只能读取一个字符。
  • getchar()函数返回值是整型,当输入错误或者遇到文件结尾时返回-1(EOF),其他情况下则返回输入的第一个字符的ASCII码值。
  • 用getchar()函数读取字符串时,字符串会存储在输入缓冲区中,包括输入的回车字符。
  • 要使字符串读取正确则要使用while((ch=getchar())!='\\n')来消除回车字符。

 

 

以上是关于C语言吃透getchar()函数,超详细解析!!!的主要内容,如果未能解决你的问题,请参考以下文章

超详细C语言带你吃透贪吃蛇游戏之精髓

C语言解题篇一看就会用,超详细解析递归函数!!!

C语言数组超详细解析

如何用getchar函数将数据存如数组?(C语言)

八千字带你高效学通C语言函数(C语言超详细教程)

C语言☀️函数超详讲解☀️(详细讲解+代码演示+图解)建议收藏