(%3d)数据格式在scanf和printf中的常规应用,你真的理解透了吗?

本文详细介绍了在C语言中,scanf和printf函数中数据格式的使用,特别是针对%d和%s等格式的扩展形式,如%3d。在scanf中,数字表示最大字段宽度,超出部分不读取;而在printf中,数字表示最小字段宽度,不足部分用空格填充。通过实例展示了不同数据长度与格式之间的关系,强调了格式控制在数据对齐和输入输出中的作用。
摘要由CSDN通过智能技术生成

前言:
对于scanf、printf中数据格式常使用的是单个,即%d、%s、%c等
但也有着像%3d等的数据格式
虽然没有在代码中常运用 ,但也得知道分别是怎么实现的

(一)数据格式在scanf中的应用

下面用 %3d 举例

#include<stdio.h>
int main()
{
	int n;
	scanf("%3d", &n);
	printf("n=%d\n",n);
	return 0;
}

运行代码,从键盘输入值
1) 比给定的数据格式小或相等
如输入 12 ,输出到屏幕上为 n=12 ;
如输入 123,输出到屏幕上为 n=123;
就是说, 在scanf中,当输入的数据长度比给定的数据格式小或者相等时时,常规存取值到指定的地址处。

2) 比给定的数据格式大
如输入 12345, 输出到屏幕上为 n =123
就是说,在scanf中,当输入的数据长度比给定的数据格式大时scanf函数会截取值存入指定的地址处。

总的来说

"%(数字)d"(或者其他转换字符)此数字在scanf中表示 最大字段宽度 。意思为,你不能输入字段比此数字还大的。即输入到达最大字段宽度时,超过宽度后面的将不再作为输入内容(相当于作废),在最大宽度内的为输入内容。

(二)数据格式在printf中的应用

还是用%3d来举例说明。

#include<stdio.h>
int main()
{
	int n = 12345;
	char arr[] = { "Hello" };
	printf("%d\n", n);
	printf("%s\n", arr);
	return 0;
}

这里创建了一个整形变量n和一个字符数组arr
1)数据格式小于变量长度
如printf直接用 %3d 打印 n ,输出为 12345
如printf直接用 %3s 打印数组 arr,输出为 Hello
就是说,在printf中,当变量长度比数据格式大时,printf与用"%d"数据格式输入完全相同,即原样输出。

2)数据格式大于变量长度
如printf用 %8d 打印 n ,输出为 (!)(!)(!)12345
如printf用 %-8d 打印 n ,输出为 12345(!)(!)(!)
如printf用 %8s 打印 arr ,输出为 (!)(!)(!)Hello
如printf用 %-8s 打印 arr ,输出为 Hello(!)(!)(!)

注:在本文中(!)表示空格的意思。
即第一条案例表示输出 3个空格+数字12345;第二条案例表示输出 数字12345+3个空格。
第三条案例表示输出 3个空格+字符Hello; 第四条案例表述输出 字符Hello+3个空格。

就是说,在printf中, 当变量长度比数据格式小时, printf打印完变量后用空格填充直到
数据格式达到所要求值。

注: 此方式常用来做数据的对齐用,对于数据的左对齐和友对齐有很大的帮助!

总的来说

"%(数字)d"(或者其他转换字符),此数字在printf中表示 最小字段宽度。意思为你输出的字段宽度最小为此数字,不够将用空格给填充到最小字段宽度。即当你输出的字段比最小字段宽度大时,原样输出,小时,将填充空格直到符合最小字段宽度。(可以理解成最终输出的只可以>=最小字段宽度)

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值