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’;%nsn为整数,读入字符串最长不超过n,末尾追加 ‘\0’;%nf读入浮点数,最多n位整数,多于n自动截断;%n[a-z]读入最多n个字符,直到遇见非a-z的字符;%[^=]读入任意多的字符,直到遇见=停止;%n[^=]读入=前最多n个字符。