库函数补充详解(2)

本文详细解释了printf函数的两种输出语句格式,强调了使用%d限制最小宽度和%s限制输出宽度的用法。同时,讨论了scanf函数的输入行为,包括对空格的处理以及如何防止溢出问题。

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

补充:printf(输出)函数有两种输出语句格式,例如:

1.printf(“a”);2.printf(“% ”,a);

ad0580b1409143389919ad23f01946f8.png

从上图的对比中,我们可以看出printf两种格式的输出并无不同,但是一般情况下,第二种格式更为方便也更为常用。

printf函数允许使用%d(整型输出格式符)限制最小宽度,方法如下图所示:

1.printf函数限制最小宽度,当宽度大于最小宽度时,从左到右原样输出。

5130577954db43479e1aa024641f617c.png

2.当宽度小于最小宽度时,如下图所示,遵寻右对齐,左补空格的原则。

33d9e92fe4864246b768ba89a42c1aa9.png

*上图中使用的%s为字符串输出格式符,一般情况下,输出语句中,%s默认从左到右全部输出,如果限制输入部分字符串,可以采用在%与s之间添加数字,限制输出最大宽度。如下图所示:

e717aa119ed34e30b59b4a63c656791c.png

我们可以从上图中看出,输出语句并未完全输出,而是按照%s中限制的宽度2输出前两个字符ab,后面的字符不输出。这是%s的限制宽度的用法。

*%s的规则是,从当前第⼀个⾮空⽩字符开始读起,直到遇到空⽩字符为⽌。所以我们需要注意在输出语句需要用到空格的时候尽量减少使用%s。会出现下图所示的情况:遇到空格读入结束,所以只有hello被存储在了地址中,所以只输出hello。1a0642d94a22427da113a8b91eae1183.png

%s的应用不止限于输出函数,在输入函数中,%s可以作为占位符出现,scanf() 将字符串读⼊字符数组时,不会检测字符串是否超过了数组⻓度,因此,储存字符串时,很可能会超过数组的边界,导致出现我们预想不到的结果。为了防⽌这种情况,使⽤ %s 占位符时,我们可以运用以上方法指定读⼊字符串的最⻓⻓度,写成 %ms ,其中的m是⼀个整数,表⽰读取字符串的最⼤⻓度,在读取完成之后后⾯的字符将被丢弃。因为 %s 不会包含空⽩字符,所以⽆法⽤来读取多个单词等,除⾮多个 %s ⼀起使⽤。这也意味着,scanf() 不适合读取可能包含空格的字符串。

*scanf() 遇到 %s 占位符,会在字符串变量末尾存储⼀个空字符 \0 。(计算不要忘记\0所占的字符位哦)

*scanf函数的占位符中,除了%c以外,自动忽略起首的空白字符,但%c会不忽略空⽩字符,总是返回当前第⼀个字符,⽆论该字符是否为空格。效果如下图所示:

dff9d86b6b84452880126ccbe7a21eb7.pngaad98d982ae344f194fb4597cc800662.png

445ec03744c1482a9a9cb41cc19b80e8.png

从以上3张图我们可以看出:scanf从左到右依次读取数据,将空格也当作数据读入,所以当第三条代码中开头输入三个空格时,看起来程序无输出,实际上是输出了三个空格。 当我们想解决这个问题时,我们可以在%c 前加上⼀个空格,这表⽰跳过零个或多个空⽩字符,这样我们就可以强制跳过空格输出数据了,如下图所示:

92a0b97be58142d6adc0b4977e4a7053.png

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值