1. C++输入输入输出包括:
- 标准I/O:对系统指定的标准设备的输入和输出。比如键盘输入数据,输出到显示屏幕
- 文件I/O:以外存磁盘文件为对象进行输入和输出。例如从磁盘文件输入数据,数据输出到磁盘文件。
- 字符串I/O:对内存中指定的空间进行输入和输出。
2. I/O类库中的常用流类
3. iostream类库的即可分别由不同的头文件来实现:
- iostream:包含了对输入输出流进行操作所需的基本信息
- fstream:用于用户管理的文件的I/O操作
- strstream:用于字符串流I/O
- stdiostream:用于混合使用C和C++的I/O机制时,例如想将C程序转变为C++程序
- iomanip:在使用格式化I/O时应包含此文件
4. 标准输出流
- cout 流对象:cout是console output的缩写,意为在控制台(终端显示器)的输出。可以传送到显示器输出,也可以重定向到磁盘文件
- cerr 流对象:标准错误流,只能在显示器输出,不经过缓冲区
- clog 流对象:在终端显示器显示错误信息。clog中的信息存放在缓冲区,缓冲区满后或者遇endl时向显示器输出。
5 格式输出 (iomanip)
5.1 使用控制符控制输入格式 (使用 cout << dec << )
控制符 | 作用 |
dec | 设置整数的基数为10 |
hex | 设置整数的基数为16 |
oct | 设置 整数的基数为8 |
setbase(n) | 设置整数的基数为n(n只能是16,10,8之一) |
setfill(c) | 设置填充字符c,c可以是字符常量或字符变量 |
setprecision(n) | 设置实数的精度为n位。在以一般十进制小数形式输出时,n代表有效数字。在以fixed(固定小数位 数)形式和scientific(指数)形式输出时,n为小数位数。默认为6. |
setw(n) | 设置字段宽度为n位。 |
setiosflags(ios::fixed) | 设置浮点数以固定的小数位数显示。 |
setiosflags(ios::scientific) | 设置浮点数以科学计数法(即指数形式)显示。 |
setiosflags(ios::left) | 输出数据左对齐。 |
setiosflags(ios::right) | 输出数据右对齐。 |
setiosflags(ios::shipws) | 忽略前导的空格。 |
setiosflags(ios::uppercase) | 在以科学计数法输出E和十六进制输出字母X时,以大写表示。 |
setiosflags(ios::showpos) | 输出正数时,给出“+”号。 |
resetiosflags() | 终止已设置的输出格式状态,在括号中应指定内容。 |
- 备注1:dec,hex,oct只能选一个,默认是dec。(设置只对当前有效)
- 使用控制符setiosflags()设置输出格式后,如果想设置为同组的另一种状态,需要先调用resetiosflags()终止原来的设置之后再重新设置。
5.2 用于控制输出格式的流成员函数 (使用cout.function)
流成员函数 | 与之作用相同的控制符 | 作用 |
precision(n) | setprecision(n) | 设置实 数的精度为n位。 |
width(n) | setw(n) | 设置字段宽度为n位。 |
fill(c) | setfill(c) | 设置填充字符c。 |
setf( ) | setiosflags( ) | 设置输出格式状态,括号中应给出格式状态,内容与控制符setiosflags括号中内容相同。 |
unsetf( ) (与setf搭配使用) | resetiosflags( ) | 终止已设置的输出格式状态。 |
5.3. 设置格式状态的格式标志
格式标志 | 作用 |
ios::left | 输出数据在本域宽范 围内左对齐 |
ios::right | 输出数据在本域宽范围内右对齐 |
ios::internal | 数值的符号位在域宽内左对齐,数值右对齐,中间由填充字符填充 |
ios::dec | 设置整数的基数为10 |
ios::oct | 设置整数的基数为8 |
ios::hex | 设置整数的基数为16 |
ios::showbase | 强制输出整数的基数(八进制以0打头,十六进制以0x打头) |
ios::showpoint | 强制输出浮点数的小点和尾数0 |
ios::uppercase | 在以科学计数法输出E和十六进制输出字母X时,以大写表示 |
ios::showpos | 输出正数时,给出“+”号。 |
ios::scientific | 设置浮点数以科学计数法(即指数形式)显示 |
ios::fixed | 设置浮点数以固定的小数位数显示 |
ios::unitbuf | 每次输出后刷新所有流 |
ios::stdio | 每次输出后清除 stdout,stderr |
- 备注1:需要设置输出指定的宽度,必须每次设置width()或者setw()
- 使用setf()设置了某种状态,如果需要改变,需要先使用unsetf终止原来的设置,然后再重新设置。
6. 输出流成员函数put:输出单个字符。例如cout.put(65); // 输出'A',功能同putchar(65)一样。
7. 标准输入流
- cin流:
- Ctrl+Z表示文件结束符。
- if (!cin) cout << "error"; 或者while (cin>>num) //判断流对象是否处于正常状态和提取操作是否成功。
- "cin>>"从输入流提取数据,遇到空格或者回车就终止。
- 用于字符串输入的流成员函数get:
- char ch;
- 不带参数的get函数:ch = cin.get(); (cin.get() == EOF文件结束符)
- 带一个参数的get函数:cin.get(ch);
- 有3个参数的get函数:cin.get(字符串数组/字符串指针,字符个数n,终止字符)
- 终止字符默认为'\n'
- 读取n-1个字符,最后一位为'\0'
- 如果在读取n-1个字符之前遇到终止符,则提前结束读取。cin.get停在终止符的原位置。
- 用成员函数getline函数读取一行字符:cin.getline(字符串数组/字符串指针,字符个数n,终止标志字符)
- 终止字符默认为'\n'。
- (终止字符未被读入,下一个getline从终止标志的下一个字符开始接着读入)
8. istream类的其他函数
- eof:
- 调用形式cin.eof()。
- 数值为非零表示真,反之为0标示假(^Z)。
- peek:
- 调用形式ch=cin.peek()。
- 观察下一个字符,指针停留在当前位置。
- putback:
- 调用形式cin.putback(ch)。
- 将前面用get或者getline函数从输入流读入的字符ch返回到输入流,插入当前指针位置。
- ignore:
- 调用方式cin.ignore(n, 终止字符),
- 默认cin.ignore(),n为1,终止符默认为EOF。跳过输入流中的n个字符,或者遇到指定终止字符时提前结束。
参考文章: 输入输出流(一)