C语言中getchar()函数的详解

这篇具有很好参考价值的文章主要介绍了C语言中getchar()函数的详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于getchar()函数的基本作用

getchar()函数顾名思义就是获取一个字符,那么他从何处获取,返回值类型又是什么让我们在MSDN中找寻答案
C语言中getchar()函数的详解
我们可以看到getchar()函数的作用是从stdin(标准输入——键盘)获取字符,他的返回值类型是int,那我们不禁要问了,为什么getchar()读取的是一个字符而返回的却是整形呢,因为字符在存储时是以阿斯克码值存储的,返回整形是返回了他的阿斯克码值,当getchar()读取错误的时候会返回EOFEOF的含义就是end of file,是文件的结束标志
C语言中getchar()函数的详解

我们可以在编译器中转到定义发现EOF就是-1,也符合getchar()函数的返回值类型int。总结一下:

1.getchar()函数的作用是从标准输入键盘中读取一个字符
2.getchar()的返回值类型为整形,返回的是读取到字符的阿斯克码值
3.当getchar()函数读取失败时,返回EOF文件的结束标志。

以上就是带大家基本了解了一下getchar()函数。

getchar()函数基本案例

首先我们在代码中深入理解getchar()函数

#include<stdio.h>

int main()
{
	int ch = getchar();

	printf("%c\n", ch);

	putchar(ch);


	return 0;
}

C语言中getchar()函数的详解

我们看到当我们在键盘中输入大写的A,getchar()函数会获取到我们输入的A并赋值给ch,之后我们使用printfputchar()函数分别打印ch,结果如上图。那么getchar()函数是如何获取到我们输入的字符的呢?其实getchar()是从缓冲区中读取到的字符

C语言中getchar()函数的详解
一开始我们并没有输入任何字符,所以getchar()函数会在缓冲区等待,当我们键盘输入A并且按下回车时,在缓冲区中就会有A和\n两个字符
C语言中getchar()函数的详解
这时候getchar()函数发现了缓冲区中的字符拿走了A,赋值给了ch。

在循环当中的getchar()

int main()
{
	int ch = 0;

	while ((ch = getchar()) != EOF)
	{
		putchar(ch);
	}

	return 0;
}

C语言中getchar()函数的详解
如上图,将getchar()函数放在while循环当中作为条件,就可以实现连续输入和打印,那么这个代码的逻辑是怎样的呢?首先我们创建一个整形变量用于接收字符,用户键盘输入进入判断,如果getchar()正常获取字符那么我们进入循环打印字符,再次输入,如果getchar()获取字符异常返回EOF那么就跳出循环。我们用一个逻辑图让大家加强理解
C语言中getchar()函数的详解
C语言中getchar()函数的详解
当我们输入A+回车时会在缓冲区出现A\n两个字符,这时getchar()进入缓冲区拿去字符A,并且进入循环打印字符A,打印完成结束第一次循环,第二次循环开始,getchar()再次进入缓冲区拿去转义字符\n,第二次进入循环,打印\n换行,带三次循环,这时getchar()进入缓冲区时,缓冲区没有字符了,开始等待用户输入,直到getchar()获取失败返回EOF跳出循环。

getchar()函数的作用

上面的代码我们理解了之后,我们会想问这样的代码到底有什么用呢,为什么我们要学习getchar()函数呢,我们来看下面这个代码

int main()
{
	char password[20] = {0};
	printf("请输入密码:\n");
	scanf("%s", password);
	printf("请确认密码(Y/N):");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("密码正确\n");
	}
	else
	{
		printf("密码错误\n");
	}
	return 0;
}

C语言中getchar()函数的详解
我们想要的逻辑是,当我们输入密码后,再次输入Y/N来确认密码是否正确,但是我们发现,输出的结果当中,我们并没有输入Y或者N,他自动输出了密码错误,这是为什么呢?
C语言中getchar()函数的详解
当我们第一次输入时我们输入123456回车,我们在缓冲区会出现123456\n 7个字符,当我们的scanf在缓冲区中拿取字符时只会拿取123456,到\n了会停止拿取,当代码执行到getchar()时,缓冲区中存在的字符\n会直接被拿走放入ch当中,进入判断ch不等于Y,输出密码错误,那么如何解决这样的问题呢?我们提前把\n拿走是不是就可以了。

int main()
{
	char password[20] = {0};
	printf("请输入密码:\n");
	scanf("%s", password);
	printf("请确认密码(Y/N):");
	getchar();
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("密码正确\n");
	}
	else
	{
		printf("密码错误\n");
	}
	return 0;
}

C语言中getchar()函数的详解
我们在判断之前在加一个getchar()函数,提前将缓冲区中的\n取走,就可达到我们想要的目的,这样的方法叫做清理缓冲区。

清理缓冲区中多个字符

上面我们了解了当有一个\n的时候如何达到我们的目的,那么如果是多个字符呢?

int main()
{
	char password[20] = {0};
	printf("请输入密码:\n");
	scanf("%s", password);
	printf("请确认密码(Y/N):");
	getchar();
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("密码正确\n");
	}
	else
	{
		printf("密码错误\n");
	}
	return 0;
}

C语言中getchar()函数的详解
我们发现当我们在正确的密码后输入空格和其他字符时,我们的代码并不能正常运行,因为getchar()只能获取一个字符能力有限,所以我们需要对我们的代码进行改进。

int main()
{
	char password[20] = { 0 };
	printf("请输入密码:\n");
	scanf("%s", password);
	printf("请确认密码(Y/N):");
	//getchar();
	
	int tmp = 0;
	while ((tmp = getchar()) != '\n')
	{
		;
	}

	int ch = getchar();
	if (ch == 'Y')
	{
		printf("密码正确\n");
	}
	else
	{
		printf("密码错误\n");
	}
	return 0;
}

C语言中getchar()函数的详解

如图我们将getchar()放入while循环当中就可以实现缓冲区中多个字符的清除,当scanf进入缓冲区获取字符时会拿取123456,遇到空格scanf停止获取,之后进入循环getchar()进入缓冲区读取字符,只要没有读到\n循环就继续执行,遍历完缓冲区字符后,最后获取\n跳出循环,在进行我们的密码判断,此时用于获取判断字符的getchar()函数进入缓冲区,没有字符可以获取,进行等待,用户输入后获取字符进行判断。文章来源地址https://www.toymoban.com/news/detail-472364.html

到了这里,关于C语言中getchar()函数的详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言如何使⽤ getchar()函数?

            字符数据输⼊使⽤的是 getchar()函数,那么该如何使⽤该函数呢?         getchar()函数的作⽤是从终端(输⼊设备)输⼊⼀个字符。该函数与 putchar() 函数不同之处是它没有参数。 该函数的定义如下。 使⽤ getchar()函数时也要添加头⽂件 stdio.h,函数的值就是从

    2024年02月20日
    浏览(22)
  • 【初阶C语言】学会使用库函数getchar和putchar

    目录 一、getchar函数 1.作用: 2.认识函数 3.运用 二、putchar函数 1.作用 2.定义 3.运用 三、getchar与putchar的运用 四、getchar的应用 1.作用:       该函数的作用是 接收一个字符 ,然后把该字符 转化对应的ASCII值 2.认识函数  参数类型:括号里面的void意思是 不接受参数 ,就是括

    2024年02月15日
    浏览(34)
  • C语言--getchar()函数超详细解析(多维度分析,小白一看就懂!!!)

    目录 一、前言 二、什么是getchar()函数 三、getchar()函数的返回类型与机制  四、连续单个字符串 (代码演示)  五、getchar()函数其他用法,实战演练(重点) (1)按照题目写出理想代码,but  出现了不理想的效果  (2)原因分析(原理详解) (3)解决方法  (4)再次练手

    2024年02月06日
    浏览(39)
  • 【C语言】详解getchar和putchar的使用方法

     🎈个人主页:库库的里昂  🎐CSDN新晋作者  🎉欢迎 👍点赞✍评论⭐收藏  ✨收录专栏:C语言初阶  ✨其他专栏:代码小游戏  🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!🤗 【 前言 】 我们知道 scanf 函数可以从键盘输入

    2024年02月14日
    浏览(30)
  • C语言(输入输出函数getchar,putchar、gets、puts,scanf,printf的功能以及用法)

    int getchar( void ); 返回值为int,所以需要用一个int变量来接收,不管输入几个字符,每次都只接收第一个字符,常与while和putchar配合使用。 从下面这张图可以看出,输入一个空格也会打印 当然,获取一个字符用得不多,每次都需要获取一串,所以我们可以配合while来使用。 用

    2024年02月02日
    浏览(40)
  • C getchar & putchar函数

    目录 前言 1.getchar()函数 2.putchar()函数 3.清空缓冲区 3.1   缓冲区 3.2   场景 3.3   问题分析  3.4   改进(即清空缓冲区) C语言的字符输入函数getchar和输出函数putchar功能介绍,以及缓冲区的简单认识。 1. int getchar(void)  函数从屏幕读取下一个可用的字符,并把它返回为一个

    2024年02月12日
    浏览(28)
  • getchar与putchar在C语言中的作用

    代替了scanf 和 printf 的输入输出 字符 的功能 代码并没有写入  n  ,但是结果出现了自动换行的结果,这是为什么呢? 代码可以运行,但是无法确认,getchar无法正常工作,原因是什么呢? 1.原因分析    scanf不会取 n,一旦有空格,scanf的工作就立即停止了 3.情景分析 此时说

    2024年02月08日
    浏览(28)
  • 《C和指针》笔记6:gets/puts/scanf/printf/getchar函数用法

    本博客可以了解一些gets/puts/scanf/printf/getchar函数的基本用法。 gets 函数从标准输入读取一行文本并把它存储于作为参数传递给它的数组中。 一行输入由一串字符组成,以一个换行符(newline)结尾 。 gets 函数 丢弃换行符 ,并在该行的末尾存储一个NUL字节(一个NUL字节是指字节模

    2024年02月11日
    浏览(41)
  • 【C语言初阶篇】scanf和getchar中缓存区的概念!

    🎬 鸽芷咕 :个人主页  🔥 个人专栏 :《C语言初阶篇》 《C语言进阶篇》 ⛺️生活的理想,就是为了理想的生活!    🌈 hello! 各位宝子们大家好啊,相信大家都多多少少了用过scanf和getchar()语句吧,但是关于缓存区的概念,我相信大多数人都没有听说过吧。    ⛳️ 写

    2024年02月14日
    浏览(38)
  • 爱上C语言:scanf、gets以及getchar输入字符串你真的懂了吗

    🚀 作者:阿辉不一般 🚀 你说呢: 不服输的你,他们拿什么赢 🚀 专栏:爱上C语言 🚀 作图工具:draw.io ( 免费开源的作图网站) 如果觉得文章对你有帮助的话,还请点赞,关注,收藏支持博主,如有不足还请指点,博主及时改正,感谢大家支持!!! 大家好啊😉!今天阿

    2024年02月05日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包