探讨getchar与scanf的区别

19 篇文章 11 订阅
订阅专栏

前言

     说到scanf与getchar,想必大家都不陌生,在学习C语言的第一天起我们就开始接触它们,但我们对它们在输入方面可能有点模棱两可,分不清scanf与getchar真正有什么区别,下面就来分别探讨一下scanf与getchar在输入上的特点。

scanf在输入上的特点

     当我们在运用scanf这个函数需要输入字符串或者数字时,scanf并不是直接从我们的键盘当中直接获取输入的信息,而是从缓冲区中获取信息,这个所谓的缓冲区,是我们在键盘上输入后暂时保存输入信息的地方。当对于输入的信息放在缓冲区中存在空格时,scanf函数只能获取空格前的信息(正常情况下)。这是scanf函数的弊端。

getchar在输入上的特点

     在输入字符或数字时运用getchar,它只能向缓冲区中读取单个字符,能够读取的内容非常地少,因此我们在运用getchar时大多时候要利用循环来进行读取,但它并不是没有优点,它能够弥补scanf在输入上读取字符的不足。当getchar向缓冲区读取字符时,'\0'与' '它都能够读取,因此我们有时利用循环来判断ch = getchar() != EOF来读取字符。

     以上的ch其实是int类型的,总是有不少人会问getchar读取的不是字符吗,为什么会用int去接收呢?仔细思考,getchar只能读取单个字符,那单个字符一定会有它的ASCII码值,那么就要用int类型的变量去接收。

举例体现scanf与getchar特点

       例题:利用scanf与getchar来输入密码,输入密码后需要确认密码,选择Y则确认成功,否则确认失败。

       大部分人的思路:先用scanf输入密码保存在一个数组中,再用getchar输入Y或N确认密码。(错误示范)代码如下:

#include <stdio.h>
int main()
{
	char password[20] = { 0 };
	printf("请输入密码->:\n");
	scanf("%s", password);
	printf("请确认密码:(Y/N):\n");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}
		return 0;
}

当我们运行时结果为:

       我们可以看到,当我们输入密码后还没来得及输入Y或N运行结果就显示确认失败,其实就是缓冲区的问题,当我们输入abcdef再输入一个回车时,scanf就在缓冲区内读取了abcdef,而回车也代表一个字符'\n',getchar就从缓冲区上读取了这个回车,回车不等于Y,则确认失败。正确的代码应该为:

#include <stdio.h>
int main()
{
	char password[20] = { 0 };
	printf("请输入密码->:\n");
	scanf("%s", password);
	getchar();
	printf("请确认密码:(Y/N):\n");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}
		return 0;
}

运行结果为:

       我们修改的地方只是在scanf的后面加了一个getchar读取走输入abcdef后的回车,此时缓冲区内没有任何字符,这时我们就能在确认密码时输入Y或N,但它仍有一定的弊端,在我们输入ab cd时问题又会出现,运行时又会在没有输入Y或N就确认失败,结果如图: 

       出现bug的原因在于scanf只会在缓冲区内接收ab,空格和cd它并没有接受,当只有一个getchar时只能读取空格,这时我们应该利用循环,多次用getchar来读取字符,直到读取的是\0为止。代码如下:

#include <stdio.h>
int main()
{
	char password[20] = { 0 };
	printf("请输入密码->:\n");
	scanf("%s", password);
	getchar();
	while (getchar() != '\n')
	{
		;
	}
	printf("请确认密码:(Y/N):\n");
	int ch = getchar();
	if (ch == 'Y')
	{
		printf("确认成功\n");
	}
	else
	{
		printf("确认失败\n");
	}
		return 0;
}

这时当我们输入ab cd就能够确认密码:

       看到此处我相信你一定对scanf与getchar在输入的特点上有了比较充分的理解,如果博客对您有帮助请点个赞支持作者,后续仍然会发表C语言学习的文章谢谢。

C语言 字符输入 scanfgetchar区别
weixin_73832459的博客
11-09 1874
C语言 字符输入 创作不易
scanf(), getchar(), 以及gets()函数注意点
07-18
对函数scanf()、getchar()、gets()的异同进行深入剖析
scanfgetchar区别getchar的妙用
abjb42911的博客
12-13 762
今天再看getchar()函数,发现与scanf函数的知识混淆了,查找资料得出下面信息。 字符数据的输入:   scanf()函数是格式输入函数,即按用户指定的格式从键盘上把数据输入到指定的变量中。   在scanf()语句的格式串中由于没有非格式字符在“%d%d%d”之间作为输入时的间隔,因此在输入时要用一个以上的空格或回车符作为每两个输入数之间的间隔。   scanf()在读...
getcharscanf区别
Yrq_Qj的博客
05-13 1484
刚开始,不知道怎么写博客,先随手写点。 getchar只能接收一个字符,该字符可赋给字符变量、整型变量或者作为表达式的一部分。 而scanf可以输入多个字符和多种不同类型变量的值,但是它不能输入空格,回车和跳格键,getchar可以。 ...
c语言基础
a8830324的博客
07-20 328
https://wenku.baidu.com/view/15d7bdf510661ed9ac51f3b8.html?from=search a++ 和 ++a 的区别 %d %c %s #include "stdio.h" 必须是双引号 或 <> 注意 ‘ ’ 和 “ ” 的区别 条件语句:   3种 i...
scanfgetchar区别
Garbage_bin的博客
11-07 1630
scanfgetchar区别及应用详解
C语言getcharscanf区别
最新发布
halo的博客
10-30 1116
综上所述,scanfgetchar 用于不同的输入场景。你应根据具体的需求选择适当的函数。如果需要处理复杂的输入数据类型,或者需要格式化输入,scanf 是更好的选择。如果你只需要单个字符输入或字符级别的处理,那么 getchar 可能更适合。
浅析getcharscanf区别
Ameneurosis_的博客
02-08 1820
1.getchar 作用是从键盘读入字符,每次只读取一个,一次读入。只有当遇到回车键时才会结束读取。且getchar有类型,为int型,所以getchar的输入一般为int类型。2.scanf的作用是输入单个字符。但是当scanf遇到空格时就结束读取,不能输入\n。尽管后面还有其他字符。如果要输入长字符,需要用到%s这个格式控制符。若输入abc分别为kg(空格)h,则输出的结果为kg(空格)。如输入a的值为k,则当回车时输出字符为k。当输入gkh时,结果输出h。对于getchar来说。
Linux系统编程基石:Getchar与putchar函数详解及C环境工具
在"Getchar、putchar函数说明 - Linux系统程序设计基础"一文中,作者探讨了Linux系统下的C语言编程基础,重点介绍了两个关键的输入输出函数:getchar()和putchar()。这些函数在程序设计中扮演着至关重要的角色,特别...
getchar函数与输入错误处理的技术指南
- 1.2 getchar函数与其他输入函数的区别 - 1.3 getchar函数返回值解析 ### 1.1 getchar函数的作用和用法 `getchar()` 函数主要用于从标准输入流中获取一个字符。其基本用法如下: ```c int getchar(void); ``` - ...
getchar函数与stdio.h头文件的结合使用
# 1. 理解getchar函数的功能 - 1.1 getchar函数的作用: - `getchar()`函数用于从标准输入流(通常是键盘输入)中读取一个字符,并将其作为返回值返回。 - 1.2 getchar函数的...接下来,我们将探讨`<stdio.h>`头文
scanf函数返回值在while中的应用
m0_67542642的博客
04-11 957
while循环的在运用 源代码: //在探讨while循环 2022.4.11 //根据用户键入的整数求和 #include<stdio.h> int main (void) { long num; long sum=0L; //把sum初始化为0 我们把sum初始化0L(long 类型的0),而不是0(int类型的0) int status; printf("请输入一个整数求和") ; printf("(q退出...
细究C语言getcharscanf区别,重点getchar
weixin_52307528的博客
01-17 1483
getchar 基本用法 1.从计算机内部缓冲区读取一个数据,并将这个数据化为int作为返回值; 2.可以读入空格 回车和制表。 简单例子1 题目;输入任意个数,求出他们的和,以输入回车作为结束;(不能使用数组) #include<stdio.h> int main() { int n; int sum=0; char x; do{ scanf("%d",&n); sum+=n; }while(x=getchar()!='\n'); printf("
scanfgetchar区别
z5148的博客
10-14 2209
循环处理不同:由于getchar函数每次只读取一个字符,通常需要放在循环中使用,直到读取到结束符号(比如EOF)为止。用途不同:scanf通常用于读取输入流中特定格式的数据,比如读取整数、浮点数、字符串等,可以根据格式字符串指定读取规则。功能不同:scanf函数用于从输入流中读取格式化的输入,可以读取除空格和换行符之外的各种字符。综上所述,scanfgetchar函数在读取字符的过程中具有不同的功能和用途,开发者可以根据具体需求选择合适的函数来实现字符输入操作。
getchar()和scanf()的区别
热门推荐
qq_43668119的博客
03-06 2万+
. 大多数人只看getchar 名字,以为其返回值是char 类型。但是getchar 的确不是char 类型,而是int 类型,其原型如下: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int getchar(void); getchar有一个int型的返回值.当程序调用getch...
scanf()与getchar()函数区别
qq_39826006的博客
07-14 703
char str1[20], str2[20]; scanf(“%s”,str1); printf(“%s\n”,str1); scanf(“%s”,str2); printf(“%s\n”,str2); return 0; } 程序的功能是读入一个字符串输出,在读入一个字符串输出。可我们会发现输入的字符串中不能出现空格,例如: 测试一输入: Hello world! 输出: Hello world! 【分析】到此程序执行完毕,不会执行第二次的读取操作!这个问题的原因跟问题一类似,第一次输入Hello wo
getcharscanf区别
m0_74609428的博客
02-21 1294
c语言学习
c语言:getchar()与scanf()区别和使用
sangyongqi的博客
04-05 3205
getcharscanf区别
写文章

热门文章

  • C语言文件操作(含详细步骤) 55383
  • 刨析TCP/IP五层模型(超详细) 9552
  • 探讨getchar与scanf的区别 8653
  • 数据结构KMP算法配图详解(C语言、Java实现,超详细) 4956
  • 哈希表查找——等概率情况下查找成功和查找不成功的平均查找长度的计算 4754

分类专栏

  • JavaEE 4篇
  • JavaSE 11篇
  • 软件测试 8篇
  • JavaWeb 17篇
  • MySQL 4篇
  • LeetCode 3篇
  • 算法 14篇
  • c语言 19篇
  • 数据结构 17篇
  • 智力题 4篇

最新评论

  • 探讨getchar与scanf的区别

    drive_wajueji: 鹏哥弟子

  • 求0-10000之间的水仙花数,并将这个数输出,打印。

    凌辰——宁: 感觉还是有点问题呀,2就不符合吧

  • 使用mybatis实现CRUD(超详细)

    Zainyu1234: 这真的是一篇很好的文章,果断收藏了!!!

  • maven的使用

    Starry Sky001: 简明扼要

  • maven的使用

    Pipi922: 这是我看过最好的教程了,真的比视频讲解还清楚,而且还省时间

最新文章

  • ReentranLock超详细讲解
  • SpringBootApplication最详细注解
  • HashMap最全面试题
2023年2篇
2022年47篇
2021年38篇

目录

目录

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zjruiiiiii

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家玻璃钢瓜果雕塑厂家定制泰州玻璃钢雕塑安装义乌人物玻璃钢雕塑设计供应服务好的玻璃钢花盆江夏玻璃钢花盆花器福建玻璃钢抽象雕塑玻璃钢天壶雕塑单价长春仿铜玻璃钢雕塑制作玻璃钢仿真水果雕塑出售黄石玻璃钢雕塑造型玻璃钢广场雕塑售价内透光玻璃钢雕塑山东室内商场美陈哪里有浦口新年商场美陈江苏玻璃钢雕塑的特点安徽玻璃钢园林雕塑玻璃钢人物雕塑视频石家庄玻璃钢雕塑订制玻璃钢雕塑灯价格景德玻璃钢卡通人物雕塑玻璃钢酒瓶雕塑厂家锦州动物玻璃钢雕塑生产厂家韶关玻璃钢人物雕塑批量定制博白玻璃钢雕塑公司玻璃钢钢动物雕塑武昌玻璃钢花盆花器桃子玻璃钢雕塑火烈鸟玻璃钢雕塑生产厂家保定玻璃钢人物雕塑价格安宁定做玻璃钢雕塑厂家贵不贵香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化