# printf-scanf

## 格式化指示符

| 说明符     | 数据类型       | 描述                                              |
| ---------- | -------------- | ------------------------------------------------- |
| `%d`       | `int`          | 输出有符号的十进制整数                            |
| `%o`       | `unsigned int` | 输出无符号八进制整数（没有前导 `0`）              |
| `%u`       | `unsigned int` | 输出无符号十进制整数                              |
| `%x`/`%X`  | `unsigned int` | 输出无符号十六进制整数（没有前导 `0x` 或者 `0X`） |
| `%zu`      | `size_t`       | 输出无符号十进制数值                              |
| `%zx`      | `size_t`       | 输出十六进制数值                                  |
| `%zd`      | `ssize_t`      | 输出有符号十进制数值                              |
| `%f`/`%lf` | `double`       | 输出十进制表示的浮点数，默认精度为 6              |
| `%e`/`%E`  | `double`       | 输出科学计数法表示的数，默认浮点数精度为 6        |
| `%g`       | `double`       | 根据数值不同自动选择 `%f` 或 `%e`                 |
| `%G`       | `double`       | 根据数值不同自动选择 `%f` 或 `%E`                 |
| `%c`       | `char`         | 把输入的数字按照 ASCII 码相应转换为对应的字符     |
| `%s`       | `char *`       | 输出字符串中的字符直至遇到字符串中的空字符 `\0`   |
| `%p`       | `void *`       | 以 16 进制形式输出指针                            |
| `%%`       | `%`            | 输出字符 `%`（百分号）本身                        |
| `%n`       | `int *`        | 到此字符之前为止，一共输出的字符个数，不输出文本  |

## printf 格式控制

| 说明符    | 描述                                     |
| --------- | ---------------------------------------- |
| `%15s`    | 占宽 15，右对齐（不考虑末尾的 `\0`）     |
| `%15.6s`  | 占宽 15，显示前 6 字符，右对齐           |
| `%-15.6s` | 占宽 15，显示前 6 字符，左对齐           |
| `%15.0s`  | 占宽 15，显示前 0 字符，右对齐           |
| `%.3s`    | 显示前 3 个字符（没有占宽，默认左对齐）  |
| `%10f`    | 占宽 10，浮点数默认保留 6 位小数，右对齐 |

## scanf 格式控制

| 说明符     | 描述                                                             |
| ---------- | ---------------------------------------------------------------- |
| `%d %d %d` | 以空格作为分隔符，读取字符串中的前 3 个整数                      |
| `%d,%d,%d` | 以逗号作为分隔符，读取字符串中的前 3 个整数                      |
| `%[^\n]`   | 读取直到换行符（`\n`）的所有字符（`scanf` 默认以空格作为结束符） |
