格式控制字符串 format


格式控制字符串由两部分组成:普通字符(非%字符)和转换说明。普通字符会进行原样输出,每个转换说明都会对应后续的一个参数,通常有几个转换说明就需要提供几个参数(除固定参数之外的参数),使之一一对应,用于控制对应的参数如何进行转换。如下所示:

printf("转换说明 1 转换说明 2 转换说明 3", arg1, arg2, arg3);

这里只是以 printf()函数举个例子,实际上并不这样用。三个转换说明与参数进行一一对应,按照顺序方式一一对应。

每个转换说明都是以%字符开头,其格式如下所示(使用[ ]括起来的部分是可选的):

%[flags][width][.precision][length]type

flags:标志,可包含 0 个或多个标志;
width:输出最小宽度,表示转换后输出字符串的最小宽度;
precision:精度,前面有一个点号" . ";
length:长度修饰符;
type:转换类型,指定待转换数据的类型。
可以看到,只有%和 type 字段是必须的,其余都是可选的。下面分别对这些字段进行介绍。

㈠、type 类型

首先说明 type(类型),因为类型是格式控制字符串的重中之重,是必不可少的组成部分,其它的字段都是可选的,type 用于指定输出数据的类型,type 字段使用一个字符(字母字符)来表示,可取值如下:在这里插入图片描述

㈡、flags

flags 规定输出样式,%后面可以跟 0 个或多个以下标志:在这里插入图片描述

㈢、width

最小的输出宽度,用十进制数来表示输出的最小位数,若实际的输出位数大于指定的输出的最小位数,则以实际的位数进行输出,若实际的位数小于指定输出的最小位数,则可按照指定的 flags 标志补 0 或补空格。
width 的可能取值如下:在这里插入图片描述

㈣、precision 精度

精度字段以点号" . "开头,后跟一个十进制正数,可取值如下:在这里插入图片描述

㈤、length 长度修饰符

长度修饰符指明待转换数据的长度,因为 type 字段指定的的类型只有 int、unsigned int 以及 double 等几种数据类型,但是 C 语言内置的数据类型不止这几种,譬如有 16bit 的 short、unsigned short,8bit 的 char、unsigned char,也有 64bit 的 long long 等,为了能够区别不同长度的数据类型,于是乎,长度修饰符(length)应运而生,成为转换说明的一部分。

length 长度修饰符也是使用字符(字母字符)来表示,结合 type 字段以确定不同长度的数据类型,如下所示:在这里插入图片描述
譬如:

printf("%hd\n", 12345); //将数据以 short int 类型进行转换
printf("%ld\n", 12345); //将数据以 long int 类型进行转换
printf("%lld\n", 12345); //将数据以 long long int 类型进行转换

示例代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main(void) 
{
	 char buf[50] = {0};
	 printf("%d (%s) %d (%s)\n", 520, "我爱你", 1314, "一生一世");
	 fprintf(stdout, "%d (%s) %d (%s)\n", 520, "我爱你", 1314, "一生一世");
	 dprintf(STDOUT_FILENO, "%d (%s) %d (%s)\n", 520, "我爱你", 1314, "一生一世");
	 sprintf(buf, "%d (%s) %d (%s)\n", 520, "我爱你", 1314, "一生一世");
	 printf("%s", buf);
	 memset(buf, 0x00, sizeof(buf));
	 snprintf(buf, sizeof(buf), "%d (%s) %d (%s)\n", 520, "我爱你", 1314, "一生一世");
	printf("%s", buf);
	 exit(0);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

比特冬哥

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

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

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

打赏作者

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

抵扣说明:

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

余额充值