C/C++ 格式化字符串
那些年被遗忘的细节
格式化字符串有讲究
输出格式化
读取格式化
1 | // 从字符串读取格式化输入 |
str – 这是 C 字符串,是函数检索数据的源。
format – 这是 C 字符串,包含了以下各项中的一个或多个:空格字符、非空格字符 和 format 说明符。
format 说明符形式为 [=%[*][width][modifiers]type=]
,具体讲解如下:
参数 | 说明 |
---|---|
* | 数据从 stream 中读取,但可以被忽略,不存储在对应的变量中。 |
width | 指定读取的最大字符数 |
modifiers | 类型修饰符,不同于 type 中的内容:F 远指针、N 近指针、h 有/无符短整型、l 有/无符长整型、L 长双精度。 |
type 类型说明符
说明符 | 描述 | 参数类型 |
---|---|---|
c | 单个字符。若 width 不为 1,读取 width 个字符。 | char* |
d | 十进制整数:数字前面的 + /- 号是可选的。 |
int* |
e,E,f,g,G | 浮点数:一个小数点. 、一个可选+ /- 号、一个可选后置字符e /E 、一个十进制数字。 |
float* |
i | 一个整数。 | int* |
o | 八进制整数。 | |
s | 字符串。读取连续字符,知道遇见空白字符(空白、换行、制表符)。 | char* |
u | 无符号十进制整数。 | unsigned int * |
x,X | 十六进制整数。 | int* |
p | 一个指针。 | - |
n | 一个等于读取字符数量的整数。 | int* |
[] | 一个字符集。 | - |
% | 一个精度符号 | - |
经典示例:
%s
输入字符串,末尾追加 ‘\0’;%ns
n为整数,读入字符串最长不超过n,末尾追加 ‘\0’;%nf
读入浮点数,最多n位整数,多于n自动截断;%n[a-z]
读入最多n个字符,直到遇见非a-z
的字符;%[^=]
读入任意多的字符,直到遇见=
停止;%n[^=]
读入=
前最多n个字符。