C语言吃透getchar()函数,超详细解析!!!
Posted Do
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言吃透getchar()函数,超详细解析!!!相关的知识,希望对你有一定的参考价值。
目录
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()函数,超详细解析!!!的主要内容,如果未能解决你的问题,请参考以下文章