初学C语言笔记——scanf()与getchar()

文章详细介绍了scanf函数的工作原理,通过一个示例解释了如何从输入缓存读取数据,并列举了scanf的各种格式控制符。接着,提到了缓存区的概念,以及何时判定输入结束。最后,介绍了getchar函数作为简单的字符输入函数,是scanf的简化版本。

想要了解getchar

则先认识scanf和“输入缓存(缓冲)区”

scanf的功能

将从键盘输入的数据,通过输入控制符转化为规定格式的数据,然后存入特定的地址等待读取。

接下来我们用一个比较复杂的例子来看一下具体的过程:

scanf("%d%c%c%d%f%d%c", &a, &b, &c, &d, &e, &f, &g);

此时你在键盘中的输入为:123ab21空格19.2空格12c回车(注意当从键盘键入回车时不仅是结束当前输入语句还将一个回车符压入了缓冲区)

第一个控制符为整型,此时缓冲区弹出数字123并存储在a指示的地址内

第二个控制符为字符型,此时缓冲区弹出字符'a'并存储在b指示的地址内

第三个控制符为字符型,此时缓冲区弹出字符'b'并存储在c指示的地址内

第四个控制符为整型,此时缓冲区弹出数字21并存储在d指示的地址内

第五个字符浮点型,此时缓冲区弹出转义字符空格非浮点型,缓冲区继续弹出浮点数19.2并存储在e指示的地址内

第六个控制符为整型,此时缓冲区弹出转义字符空格非整型,缓冲区继续弹出数据12并存储在f指示的地址内。

第七个控制符为字符型,此时缓冲区弹出字符'c'并存储在g指示的地址内。

没有新的控制符,此时读取结束。但需要记住,此时缓冲区内还有一个转义字符回车。

 

scanf()格式控制符汇总

格式控制符说明
%c读取一个单一的字符
%hd、%d、%ld读取一个十进制整数,并分别赋值给 short、int、long 类型
%ho、%o、%lo读取一个八进制整数(可带前缀也可不带),并分别赋值给 short、int、long 类型
%hx、%x、%lx读取一个十六进制整数(可带前缀也可不带),并分别赋值给 short、int、long 类型
%f、%lf读取一个十进制形式的小数,并分别赋值给 float、double 类型
%e、%le读取一个指数形式的小数,并分别赋值给 float、double 类型
%g、%lg既可以读取一个十进制形式的小数,也可以读取一个指数形式的小数,并分别赋值给 float、double 类型
%s读取一个字符串(以空白符为结束)

缓存区概念

 在运行窗口的时候,缓存区内没有数据,scanf函数等输入函数正在等待键盘输入字符串来读取数据,则运行窗口的光标一直在闪烁。

当键盘输入一串字符串后(以回车结尾),这串字符串(包括回车键)则会进入到一个特殊的计算机空间——“缓存区”,用来暂时保存输入或输出的数据。

格式控制符,就是来控制scanf函数如何读取存放在“缓存区”的数据。

注意遇到以下情况可以判定输入结束(在字符串末尾处):
1)回车(\n换行符),空格(空白符),tab键(制表符)
2)达到输入位宽
3)遇到非法字符

认识了scanf函数和缓存区的概念,接下来就可以认识getchar函数了

getchar()

最容易理解的字符输入函数是 getchar(),使用时,它给予我们的反馈则是读取一个“单一的字符,那么它就是scanf(“%c”, c)的替代品,除了更加简洁,没有其它优势了;或者说,getchar() 就是 scanf() 的一个简化版本。

评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值