2.6 输入输出流简介
2.6.1 无格式输入/输出(默认的格式输入输出)
输入和输出并不是C++语言的组成部分,而是iostream库支持来实现的。
在iostream库中,输入输出是按流的形式进行操作的。输入和输出操作分别由istream(输入流)和ostream(输出流)两个类提供,而iostream则是这两个类的派生类。它允许进行双向的I/O操作。istream的输入操作可以认为是一个数据抽取的过程,通过右移操作符”>>”从输入流抽取数据;而ostream的输出操作则可以认为是一个数据插入过程,通过左移操作符”<<”将数据插入到输出流中。在iostream库中,已经预先定义了4个流的对象,供用户使用,它们分别是:
(1)、cin:istream类对象,用于处理标准输入,它从标准输入终端(键盘)上获得数据,并将这些数据加入到输入流中。
(2)、cout:ostream类对象,用于处理标准输出,它将输出流中的数据发送到标准输出设备(显示器)上,并在标准输出设备上进行显示。
(3)、cerr:ostream类对象,用于处理标准出错信息,并提供不带缓冲区的输出。
(4)、clog:ostream类对象,用于处理标准出错信息,但提供带有缓冲区的输出。
任何一个使用iostream库的程序都必须包含头文件iostream.h。
cout语法结构如下:
cout<<output_data1<<output_data2<<.,,<<output_datan;
cin语法结构如下:
cin>>varible1>>varible2>>.,,>>variblen;
2.6.2 指定格式输入输出
有的时候需要按特定的格式进行输入输出,这时需要了解输入输出流的格式状态符。
每个iostream对象都对应一组描述其处理数据格式状态的状态变量。用户可以通过成员函数setf()和unsetf()来设置或取消某个状态标志。同时,系统还提供给用户一套用于修改某个对象状态的操作符。
在隐含的情况下,对整数的读写是按十进制的方式进行的,若应用需要时,用户可以oct、hex、dec将整数指定为按八进制、十六进制或恢复为十进制进行读写。
例如,cout<<”octal:”<<”\t\t”<<oct<<6<<\’\n’;
在隐含的情况下,每个浮点数具有6位数字精度,要想改变这一设置,可以通过成员函数precision(int)来实现,而precision()则返回当前的精度。
例如:
cout.precision(12);
cout<<”precision:”<<cout.precision()<<endle;
cout<<f<<endle;
如果要按更复杂的格式进行数据输入输出,则需要成员setf()对输入输出的格式状态标志进行设置。该函数具有重载实例,如下所示:
格式1:setf(long);
格式2:setf(long,long);
格式1中的参数可以是一个二进制标志位或一个标志域。表2.8列出了常用的标志位及其含义。
表2.8 输入输出格式状态标志符的标志位及其含义标志
含义
ios::showbase
显示数值的进制
ios::showpoint
显示小数点
ios::dec
设定为十进制基准
ios::hex
设定为十六进制基准
ios::oct
设定为八进制基准
ios::fixed
以小数形式显示浮点数
ios::scientific
以科学记数法形式显示浮点数
在格式2中,第一个参数是一个设定值,而第二个参数参数是设定该值的标志域。表2.9列出了这两个参数可取的值。
表2.9 输入输出格式状态标志符的标志位的作用参数标志位
含义
标志取值
ios::basefield
整数的进制
ios::hex
ios::oct
ios::dec
ios::floatfield
浮点数的精度及格式
ios::fixed
ios::scientific
Setf(long,long)首先将标志域清零,然后根据第一个参数对联标志域进行设置,它返回该标志域重新设置之前的值,其类型也是long。利用其返回值,可以保存该值,以备以后恢复该状态。
[例2.13] 按不同格式进行数据输出(EX2_13.cpp*)。