# 输入输出
## 概述
头文件iostream和fstream中定义的一组类。这个类库不是正式语言的组成部分,cin和istream都不是关键字。
C++程序将输入输出看作字节流。输入时程序从输入流中抽取字节;输出时程序将字节插入到输出流中。输入流中的字节可以来自键盘,也可以来自存储设备或者其他程序。同样,输出流中的字节可以流向屏幕、打印机、存储设备或者其他程序。流充当了程序和其他目标的桥梁。
通常使用缓冲区可以高效地处理输入输出。
## cout输出
### 1. 修改显示时使用的计数系统
ostream从ios类派生而来,ios类从ios_base类派生而来。ios_base类存储了格式状态信息。通过使用控制符可以控制显示整数时使用的计数系统。由于ios_base是ostream的间接基类,所以ios_base方法也可以用于ostream对象。
要控制整数以十进制、二进制还是十六进制显示,可以使用dec、hex、oct控制符。
```C++
hex(cout);
cout << hex;
//两种使用方法是一样的
```
### 2. 调整字段宽度
新的宽度设置只对下一次输出有效。
```C++
cout.width(20);
```
### 3. 填充字符
默认情况下,cout用空格填充字段中未被使用的部分,也可以使用fill()成员函数来改变填充字符。新的填充设置将一直有效。
```C++
cout.fill('*');
```
### 4. 设置浮点数的显示精度
默认显示总位数,浮点数为六位。在定点模式和科学模式下。新的进度设置将一直有效。
```C++
cout.precision(2);
```
### 5. 打印末尾的0和小数点
```C++
cout.setf(ios_base::showpoint);
```
### 6. setf()
setf()方法控制了小数点被显示时,其他几个格式选项。其函数原型为两种。
```C++
fmtflags setf(fmtflags);
fmtflags setf(fmtflags, fmtflags);
```
单参数选项
| 常量 | 含义 |
| ------------------- | ------------------------------------- |
| ios_base::boolalpha | 输入输出bool值时,可以为true或者false |
| ios_base::showbase | 输出使用C++基数前缀(0,0x) |
| ios_base::showpoint | 显示末尾的小数点 |
| ios_base::uppercase | 16进制输出使用大写字母表示法 |
| ios_base::showpos | 在正数前面加上+号 |
双参数选项
| 参数一 | 参数二 | 含义 |
| -------------------- | --------------------- | -------------------- |
| ios_base::dec | ios_base::basefield | 使用基数10 |
| ios_base::oct | ios_base::basefield | 使用基数8 |
| ios_base::hex | ios_base::basefield | 使用基数16 |
| | | |
| ios_base::fixed | ios_base::floatfield | 使用定点计数法 |
| ios_base::scientific | ios_base::floatfield | 使用科学计数法 |
| | | |
| ios_base::left | ios_base::adjustfield | 使用左对齐 |
| ios_base::right | ios_base::adjustfield | 使用右对齐 |
| ios_base::internal | ios_base::adjustfield | 符号左对齐,值右对齐 |
```C++
ios_base::fmtflags old = cout.setf(ios::left, ios::adjustfield);
//恢复之前的设置使用 cout.setf(old, ios::adjustfield)
```
### 7. 标准控制符
| 控制符 | 调用原型 |
| ----------- | ------------------------------------------------ |
| boolalpha | setf(ios_base::boolalpha) |
| noboolalpha | unsetf(ios_base::boolalpha) |
| showbase | setf(ios_base::showbase) |
| noshowbase | unsetf(ios_base::showbase) |
| showpoint | setf(ios_base::showpoint) |
| noshowpoint | unsetf(ios_base::showpoint) |
| showpos | setf(ios_base::showpos) |
| noshowpos | unsetf(ios_base::showpos) |
| uppercase | setf(ios_base::uppercase) |
| nouppercase | unsetf(ios_base::uppercase) |
| internal | setf(ios_base::internal, ios_base::adjustfield) |
| left | setf(ios_base::left, ios_base::adjustfield) |
| right | setf(ios_base::right, ios_base::adjustfield) |
| dec | setf(ios_base::dec, ios_base::basefield) |
| hex | setf(ios_base::dec, ios_base::basefield) |
| oct | setf(ios_base::oct, ios_base::basefield) |
| hex | setf(ios_base::hex, ios_base::basefield) |
| fixed | setf(ios_base::fixed, ios_base::floatfield) |
| scientific | setf(ios_base::scientific, ios_base::floatfield) |
## cin输入