C语言中scanf与键盘缓冲区

本文详细解析了C语言中scanf函数与键盘缓冲区的关系,包括整型、字符和字符串格式的输入处理。重点阐述了%d、%c、%s格式的输入过程,以及如何处理输入的回车和空格。对于%d格式,强调了安全赋值的字节数要求,而对于%c和%s,描述了它们如何从缓冲区中读取数据并清理缓冲区的细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.屏幕输入与键盘缓冲区存储
根据ASCII表存储ASCII值。
若输入97+回车键,则缓冲区存储的是39h,37h,0Ah.

 

2.整型格式输入
scanf("%d",&a);
过程:
scanf按照%d格式最多扫描buffer中前4个字节。
如果在读取buffer前四个字节中没有遇到回车符,那么将4个字节按照%d转化为4个字节的整型。
如果在读取buffer前四个字节中遇到回车符,那么将回车符前面的几个字节按照%d转化为4个字节的整型。
4个字节的整数按照最低位字节,次低位,次高位,最高位依次存放在以&a开始的地址上。即&a放最低位字节,&a+1放次低位...
最后将回车符之前的和回车符本身从缓冲区中删除。
举例:
如果输入258+回车键,而a的定义有如下的几种可能:
char a;//地址&a的单个字节中存放的是最低位字节
char a[4];//地址&a的单个字节中存放的是最低位字节,&a+1放次低位...,即a[0]为02h,a[1]为01h,a[2]为00h,a[3]为00h。
char a[2];//地址&a的单个字节中存放的是最低位字节,&a+1放次低位...,即a[0]为02h,a[1]为01h。
对于以上的char a;和char a[2];来说,当4个字节的整数给&a开始的地址赋值时,会发生地址越界,这是很危险的。
所以a的定义至少4个字节才是安全的。

 

3.字符格式输入
scanf("%c",&a);
过程:
scanf按照%c格式最多扫描buffer中前1个字节。
如果在读取buffer前1个字节中没有遇到回车符,那么将1个字节直接赋给以&a开始的地址。如果在读取buffer前1个字节中遇到回车符,那么将回车符0Ah赋给以&a开始的地址。即无论遇到什么字符,都直接赋给以&a开始的地址。
最后将第一个字节从缓冲区删除。
举例:
char a;
char b;
sca

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值