C 语言中printf 详解

本文详细介绍了C语言中的printf函数,包括依赖的头文件、函数声明、描述、format参数、转换说明符、宽度、精度、长度修饰符等概念,并通过实例展示了如何设置宽度、精度、长度修饰符及各种标志的使用。
摘要由CSDN通过智能技术生成

依赖的头文件

#include <stdio.h>

声明

int printf(const char *format, ...);

描述

当前函数根据format内容写内容到到标准输出流(stdout)

format

定义

代表一串可以包含转换说明符的字符串

分类

包含转换说明符
转换说明符
定义

可以将augument (代表printf 中的"...")中的值转换成特定格式的内容

格式

%[flags][width].[precision][length modifier]"conversion specifier"

flags

字符 % 后跟以下零个或多个标志:

  • # 该值应转换为“替代形式”。 对于 o 转换,输出字符串的第一个字符设置为零(如果还不是零,则为前缀 0)。 对于 x 和 X 转换,非零结果前面会附加字符串“0x”(对于 X 转换,则为“0X”)。 对于 a、A、e、E、f、F、g 和 G 转换,结果将始终包含小数点,即使后面没有数字也是如此(通常,仅当后面有数字时,这些转换的结果中才会出现小数点)。 对于 g 和 G 转换,尾随零不会像其他方式那样从结果中删除。 对于其他转换,结果未定义。

  • 0 该值应为零填充。 对于 d、i、o、u、x、X、a、A、e、E、f、F、g 和 G 转换,转换后的值在左侧用零填充,而不是空格。 如果同时出现 0 和 - 标志,则忽略 0 标志。 如果使用数值转换(d、i、o、u、x 和 X)给出精度,则忽略 0 标志。 对于其他转换,行为未定义。

  • - 转换后的值将在字段边界上进行调整。 (默认值为正确对齐。 除 n 次转换外,转换后的值在右侧用空格填充,而不是在左侧用空格或零填充。 A - 如果两者都给定,则覆盖 0。

  • ' ' (空格) 在有符号转换生成的正数(或空字符串)之前应留空。

  • + 符号(+或-)应始终放在带符号转换产生的数字之前。 默认情况下,符号仅用于负数。 如果同时使用空格,则 A + 将覆盖空格。

上面的五个标志字符在 C 标准中定义。 SUSv2 指定另一个标志字符。

  • '    对于十进制转换(i、d、u、f、F、g、G),如果区域设置信息指示任何字符,则输出将使用千个分组字符进行分组。 请注意, 许多版本的 gcc(1) 无法解析这个选项, 并会发出警告。 SUSv2 不包括 %'F。 glibc 2.2 又增加了一个标志字符。

  • I  对于十进制整数转换(i、d、u),输出使用区域设置的替代输出数字(如果有)。 例如,从 glibc 2.2.3 开始,这将在波斯语 (“fa_IR”) 语言环境中提供阿拉伯语-印度语数字。

width

  • 可选的十进制数字字符串(首位数字不为零),用于指定最小字段宽度。
  • 如果转换后的值的字符数少于字段宽度,则将在左侧(或右侧,如果已给出左调整标志)填充空格。
  • 可以写“*”或“*m$”(对于一些十进制整数 m)来代替十进制数字字符串,以指定字段宽度分别在下一个参数或第 m 个参数中给出,该参数必须为 int 类型。(如果用的是* 则对应的数值应该在实际数据的前面,比如 宽度为4 printf("%*d\n", 4, 5); 如果用的是*m$, m 需要填写一个整形的数字(大于1),对应的数值,在实际数据之后, 比如宽度为4 printf("%*2$d\n"), 5, 4);)

  • 负字段宽度作为“-”标志,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值