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