前言
在C++的标准库中,将用于进行数据输入输出的类统称为”流类“。cin是流类istream的对象,cout是流类ostream的对象。要使用流类,需要在程序中包含iostream头文件。
在C++中,输入流和输出流是通过流对象来表示的,主要包括以下几种类:
std::ifstream:用于从文件读取数据的输入流类。
std::istringstream:用于从字符串读取数据的输入流类。
std::cin:标准输入流,用于从键盘读取数据。
std::ofstream:用于向文件写入数据的输出流类。
std::ostringstream:用于将数据写入字符串的输出流类。
std::cout:标准输出流,用于将数据输出到屏幕
标准流对象
iostream头文件中定义了四个标准流对象,它们是cin、cout、cerr和clog。
cin对应于标准输入流,用于从键盘读取数据,也可以被重定向为从文件中读取数据。
cout对应于标准输出流,用于向屏幕输出数据,也可以被重定向为向文件写入数据。
clog对应于标准错误输出流,用于向屏幕输出错误信息,不能被重定向。
cerr和clog的区别在于:cerr不适用缓冲区,直接向显示器输出信息;而输出到clog中的信息会先被存放到缓冲区,缓冲区满或者刷新时才输出到屏幕。
ostream类的无参构造函数和复制构造函数都是私有的,因此在程序中一般无法定义ostream类的对象,唯一能用的ostream类的对象就是cout。
cout可以被重定向,而cerr不能。所谓重定向,就是将输入的源或输出的目的地改变。例如,cout本来是输出到屏幕的,但是经过重定向,本该输出到屏幕上的东西就可以被输出到文件中。
使用输入流时,我们可以使用相应的输入流对象来读取数据,如 >>
运算符从输入流中提取数据到变量中。
使用输出流时,我们可以使用相应的输出流对象来将数据写入到流中,如 <<
运算符将数据从变量输出到输出流中。
文件处理
三个基本步骤:
- 打开文件
- 读/写文件
- 关闭文件
文件打开方式
标识常量 意义
ios::in 读方式打开文件
ios::out 写方式打开文件
ios::ate 打开文件时,文件指针指向文件末尾
ios::app 追加方式,将向文件中输出的内容追加到文件尾部
ios::trunc** 删除文件现有内容**
ios::nocreate 如果文件不存在,则打开操作失败
ios::noreplace 如果文件存在,则打开操作失败
ios::binary 以二进制代码方式打开,默认为文本方式
格式化控制
头文件 #include<iomanip>
默认
域宽确定;
输出精度,浮点型有效位6位,
右对齐,无填充。
setw(val)
对象>>setw(val)>>a 指定输入的域宽,从对象读出时最多只提取val位
对象<<setw(val)<<a 指定输出的域宽,a在对象中的存在至少占val位,超过不截断
只对相邻的一项有效
setprecision(val)
对象<<setprecision(val)<<a 指定输出的有效位数,指定的太大则规定失效
对指定之后的所有数据生效
setiosflags(状态标志)
ios::left 左对齐,右边填充空格
ios::right 右对齐,左边填充空格,默认
ios::fixed 以定点形式输出浮点数
ios::scientific 以科学计数法输出浮点数
ios::dec 随后输出的所有整数为十进制
ios::hex 随后输出的所有整数为十六进制
ios::oct 随后输出的所有整数为八进制
ios::showpoint 输出小数点和尾部的零
ios::showpos 输出正数前的+
ios::uppercase 十六进制使用大写字母输出