>[danger] 需要引入 `cstdio` 或 `stdio.h`
## 一.格式化输入
1. 函数简介
| 函数 | **int** scanf(**const char\*** format,...) |
| ---------- | ------------------------------------------------------------ |
| **功能** | 从标准输入(stdin)读取格式化输入。若输入缓冲区中没有字符,则从系统隐含指定的输入设备(键盘)中输入一个字符。若输入缓冲区中有字符,则不从缓冲区中读取字符。 |
| **参数** | **const char** *format 格式化输入字符串。格式转换说明符以外的字符需要按原样输入。两个数之间若无其他字符则可以通过输入空格字符(空格字符可以是空白、换行和制表符)隔开。 |
| **参数** | **…** 变量 **地址表** |
| **返回值** | **int** 成功匹配和赋值的个数。如果到达文件末尾或发生读错误,则返回 EOF。 |
2. 格式转换说明符 `%[*][width][modifiers]type`
| **参数** | **描述** |
| ------------- | ------------------------------------------------------------ |
| **\*** 忽略输入 | 这是一个可选的星号,表示数据是从流 stream 中读取的,但是可以被忽视,即它不存储在对应的参数中。 |
| **width** 宽度 | 这指定了在当前读取操作中读取的最大字符数。 |
| **modifiers** 修饰符| 为对应的附加参数所指向的数据指定一个不同于整型(针对 d、i 和 n)、无符号整型(针对 o、u 和 x)或浮点型(针对 e、f 和 g)的大小: |
| **type** 类型|指定了要被读取的数据类型以及数据读取方式。|
>[warning]不支持设置精度
![](https://img.kancloud.cn/36/7e/367e23f5baec72795d2bb4c056518b8a_1686x620.png)
3. 百分号输入 `%%`
4. 字符输入
+ 字符 `%c`
>[warning]%c只会读取一个字符,在输入结束时,后面不要加空白字符。
```c++
char type,confirm;
scanf("%c %c",&type,&confirm);
printf("%c,%c",type,confirm);
```
>执行情况1
>BY [回车]
>B,Y
>执行情况2
>B Y [回车]
>B,
>[success]若`scanf` 以 `%c` 开头,最好在 `%c` 前面加入一个空格,防止程序绕过输入,直接读取缓冲区中的 `\n`
```c++
char type,confirm;
scanf("%c",&type);
scanf("%c",&confirm);
printf("%c,%c",type,confirm);
```
>结果
>B [回车]
>Y [回车]
>B,
>
```c++
char type,confirm;
scanf(" %c",&type);
scanf(" %c",&confirm);
printf("%c,%c",type,confirm);
```
>结果
>B [回车]
>Y [回车]
>B,Y
5. 浮点数输入:小数形式和指数形式均可
+ 类型
+ 浮点数 `e,E,g,G,f,F`
+ 修饰符
+ 双精度 `l`
+ 长双精度 `L`
6. 字符串输入 `%s`
>[primary]遇到空白字符或到达 `width` 长度(不含'\0')后字符串输入停止。
7. 整数输入
+ 类型
+ 十进制
+ 有符号 `d`
+ 无符号 `u`
+ 八进制
+ 无符号 `o`
+ 十六进制
+ 无符号 `x,X`
+ 修饰符
+ 短整型 `h`
+ 长整型 `l`
8. 获取已输入的字符数
+ 类型 `%n`
+ 修饰符
+ 短整型 `h`
长整型 `l`
## 二.格式化输出
![](https://img.kancloud.cn/b9/47/b947933f4902c53ae5eedd492bf8124b_2113x965.png)
1. 函数概览
| **函数** | **int** printf(**const char\*** format,...) |
| ---------- | ------------------------------------------------------------ |
| **功能** | 从标准输入(stdout)读取格式化输入。若输入缓冲区中没有字符,则从系统隐含指定的输入设备(键盘)中输入一个字符。若输入缓冲区中有字符,则不从缓冲区中读取字符。 |
| **参数** | **const char** *format 格式化输出字符串。 |
| **参数** | ... 变量表 |
| **返回值** | **int** 如果成功,则返回写入的字符总数,否则返回一个负数。 |
2. 格式修饰符 `%[flags][width][.precision][length]specifier`
+ **flags** 标识
+ **-** 在给定的字段宽度内左对齐,**默认是右对齐**。
+ **+** 在正数前面加上+。
+ **空格** 如果没有任何符号,则在值前面插入一个空格。
+ **#**
+ 与 o、x 或 X 说明符一起使用时,非零值前面会分别显示 0、0x 或 0X。
+ 与 e、E 和 f 一起使用时,会强制输出包含一个小数点,即使后边没有数字时也会显示小数点。默认情况下,如果小数点后边没有数字时候,不会显示显示小数点。
+ 与 g 或 G 一起使用时,结果与使用 e 或 E 时相同,但是尾部的零不会被移除。
+ **0** 当指定width且输出的值短于该数时,**左边的剩余部分会填充0,而不是空格**。
+ **width** 要输出的字符的最小数目。如果输出的值短于该数,剩余部分会用空格填充。如果输出的值长于该数,结果不会被截断。
+ **.precision**
+ 对于整数说明符(d、i、o、u、x、X):precision 指定了要写入的数字的最小位数。
+ 如果写入的值短于该数,**结果会用零来填充**。
+ 如果写入的值长于该数,结果不会被截断。
+ 精度为 0 意味着不写入任何字符。
+ 对于 e、E 和 f 说明符:要在小数点后输出的小数位数(**会四舍五入**)。
+ 对于 g 和 G 说明符:要输出的最大有效位数。
+ 对于 s: 要输出的最大字符数。默认情况下,所有字符都会被输出,直到遇到末尾的空字符。**当未指定任何精度时,默认为 1。**
+ **length**
+ h 参数被解释为短整型或无符号短整型(仅适用于整数说明符:i、d、o、u、x 和 X)。
+ L 参数被解释为长双精度型(仅适用于浮点数说明符:e、E、f、g 和 G)。
+ l 参数被解释为长整型或无符号长整型,适用于整数说明符(i、d、o、u、x 和 X)及说明符 c(表示一个宽字符)和 s(表示宽字符字符串)。
+ **specifier** 格式字符
| **格式字符** | **意义** |
| ------------ | ------------------------------------------------------------ |
| **d** | 以十进制形式输出带符号整数(正数不输出符号) |
| **o** | 以八进制形式输出无符号整数(不输出前缀0) |
| **x,X** | 以十六进制形式输出无符号整数(不输出前缀0x) |
| **u** | 以十进制形式输出无符号整数 |
| **f** | 以小数形式输出单、双精度实数 |
| **e,E** | 以指数形式输出单、双精度实数 |
| **g,G** | 以%f或%e中较短的输出宽度输出单、双精度实数,且不输出无意义的0 |
| **c** | 输出单个字符 |
| **s** | 输出字符串 |
| **p** | 输出指针地址 |
- 阅读说明
- 1.1 概述
- C++基础
- 1.2 变量与常量
- 1.2.1 变量
- 1.2.2 字面值常量
- 字符型常量
- 数值型常量
- 1.2.3 cv限定符
- 1.3 作用域
- 1.3.1 标识符
- 1.3.2 *命名空间
- 1.3.3 作用域
- 1.3.4 可见性
- 1.4 数据类型
- 1.4.1 概述
- 1.4.2 处理类型
- 类型别名
- * auto说明符
- * decltype说明符
- 1.4.3 数组
- 1.4.4 指针
- 1.4.5 引用
- 1.5 表达式
- 1.5.1 概述
- 1.5.2 值的类别
- 1.5.3 *初始化
- 1.5.4 运算符
- 算术运算符
- 逻辑和关系运算符
- 赋值运算符
- 递增递减运算符
- 成员访问运算符
- 位运算符
- 其他运算符
- 1.5.5 *常量表达式
- 1.5.6 类型转换
- 第2章 面向过程编程
- 2.1 流程语句
- 2.1.1 条件语句
- 2.1.2 循环语句
- 2.1.3 跳转语句
- 2.1.4 *异常处理
- 2.2 函数
- 2.2.1 概述
- 2.2.2 函数参数
- 2.2.3 内置函数
- 2.2.4 函数重载
- 2.2.5 * 匿名函数
- 2.3 存储和生命期
- 2.3.1 生命周期与存储区域
- 2.3.2 动态内存
- 2.4 *预处理命令
- 第3章 面向对象编程
- 3.1 概述
- 3.2 类和对象
- 3.3 成员
- 3.3.1 访问限制
- 3.3.2 常成员
- 3.3.3 静态成员
- 3.3.4 成员指针
- 3.3.5 this指针
- 3.4 特殊的成员函数
- 3.4.1 概述
- 3.4.2 构造函数
- 3.4.3 析构函数
- 3.4.4 拷贝语义
- 3.4.5 * 移动语义
- 3.5 友元
- 3.6 运算符重载与类型转换
- 3.6.1 概述
- 3.6.2 重载方法
- 3.6.3 类型转换
- 3.7 继承与多态性
- 3.7.1 概述
- 3.7.2 派生类
- 3.7.3 子类型
- 3.7.4 虚基类
- 3.7.5 虚函数
- 3.7.6 抽象类
- 3.8 模板与泛型
- 3.8.1 概述
- 3.8.2 模板类型
- 3.8.3 *模板参数
- 3.8.4 *模板编译
- 3.8.5 *模板推断
- 3.8.6 *实例化与特例化
- 第4章 C++标准库
- 4.1 概述
- 4.2 输入输出流
- 4.2.1 概述
- 4.2.2 *流的状态
- 4.2.3 *常用流
- 4.2.4 *格式化I/O
- 4.2.5 *低级I/O
- 4.2.6 *随机访问
- 4.3 *C输入输出
- 4.3.1 *字符输入输出
- 4.3.2 *格式化输入输出
- 4.4 * 容器
- 4.4.1 * 概述
- 4.4.2 * 基本操作
- 4.4.3 * 顺序容器
- 4.4.4 * 迭代器
- 4.4.5 * 容器适配器
- 4.5 * 泛型算法
- 4.6 * 内存管理
- 4.6.1 * 自动指针
- 4.7 * 其他设施