当前位置:
文档之家› 《C++程序设计》电子教案第10章 流类库与输入输出
《C++程序设计》电子教案第10章 流类库与输入输出
C++中所有流都是相同的 , 但文件可以不同 。 中所有流都是相同的, 但文件可以不同。 中所有流都是相同的 使用流以后, 使用流以后 , 程序用流统一对各种计算机设备 和文件进行操作,使程序与设备、 和文件进行操作 , 使程序与设备 、 程序与文件 无关,从而提高了程序设计的通用性和灵活性。 无关 , 从而提高了程序设计的通用性和灵活性 。 也就是说, 也就是说 , 无论与流相联系的实际物理设备差 别有多大,流都采用相同的方式运行。 别有多大 , 流都采用相同的方式运行 。 这种机 制使得流可以跨越物理设备平台, 制使得流可以跨越物理设备平台 , 实现流的透 明运作,而与实际的物理设备无关。例如, 明运作 , 而与实际的物理设备无关 。 例如 , 往 显示器上输出字符和向磁盘文件或打印机输出 字符,尽管接受输出的物理设备不同, 字符 , 尽管接受输出的物理设备不同 , 但具体 操作过程是相同的。 操作过程是相同的。
返回本节
10.2 格式化 格式化I/O
10.2.1 10.2.2 10.2.3 10.2.4 ios类中的枚举常量 类中的枚举常量 使用ios成员函数 使用 成员函数 使用I/O操作符 使用 操作符 检测流操作的错误
返回首页
10.2.1 ios类中的枚举常量 类中的枚举常量
在根基类ios中定义有三个用户需要使用的枚举类型, 在根基类 中定义有三个用户需要使用的枚举类型,由 中定义有三个用户需要使用的枚举类型 于它们是在公用成员部分定义的, 于它们是在公用成员部分定义的,所以其中的每个枚举类 型常量在加上ios::前缀后都可以为本类成员函数和所有外 型常量在加上 前缀后都可以为本类成员函数和所有外 部函数访问。 部函数访问。 在三个枚举类型中有一个无名枚举类型, 在三个枚举类型中有一个无名枚举类型,其中定义的每个 枚举常量都是用于设置控制输入输出格式的标志使用的。 枚举常量都是用于设置控制输入输出格式的标志使用的。 该枚举类型定义如下: 该枚举类型定义如下: enum { skipws,left,right,internal,dec,oct,hex,sh owbase,showpoint, uppercase,showpos,scientific,fixed,unitbuf, stdio };
10.1.1 预定义流
1.cout . 输出流类中定义有对左移操作符<<重载的一 在 ostream输出流类中定义有对左移操作符 重载的一 输出流类中定义有对左移操作符 组公用成员函数,函数的具体声明格式为: 组公用成员函数,函数的具体声明格式为: ostream& operator<<(简单类型标识符); (简单类型标识符) 2.cin . 输入流类中定义有对右移操作符>>重载的一组 在istream输入流类中定义有对右移操作符 重载的一组 输入流类中定义有对右移操作符 公用成员函数,函数的具体声明格式为: 公用成员函数,函数的具体声明格式为: istream& operator>>(简单类型标识符 ); (简单类型标识符&)
3.cerr . cerr类似标准错误文件。cerr与cout的差别在于: 类似标准错误文件。 的差别在于: 类似标准错误文件 与 的差别在于 不能重定向。 (1)cerr不能重定向。 ) 不能重定向 不能被缓冲, (2)cerr不能被缓冲, 它的输出总是直接传达到标准输 ) 不能被缓冲 出设备上。 出设备上。 4.clog . clog是不能重定向的,但是可以被缓冲。在某些系统中, 是不能重定向的, 是不能重定向的 但是可以被缓冲。在某些系统中, 由于缓冲,使用clog代替 代替cerr可以改进显示速度。 可以改进显示速度。 由于缓冲,使用 代替 可以改进显示速度 clog << "Error" << "\n";
C++中把数据之间的传输操作称作流。在C++ 中把数据之间的传输操作称作流。 中把数据之间的传输操作称作流 中,流既可以表示数据从内存传送到某个载体 或设备中,即输出流; 或设备中,即输出流;也可以表示数据从某个 载体或设备传送到内存缓冲区变量中, 载体或设备传送到内存缓冲区变量中,即输入 在进行I/O操作时 首先打开操作, 操作时, 流。在进行 操作时,首先打开操作,使流和 文件发生联系, 文件发生联系,建立联系后的文件才允许数据 流入或流出,输入或输出结束后, 流入或流出,输入或输出结束后,使用关闭操 作使文件与流断开联系。 作使文件与流断开联系。
long flags(long f);//重新设置格式状态字为 的值,返回此前的格式状态字 重新设置格式状态字为f的值 重新设置格式状态字为 的值, int good(); //操作正常时返回非 值,当操作出错、失败和读到文件 操作正常时返回非0值 当操作出错、 操作正常时返回非 //结束符时均为不正常,则返回0 结束符时均为不正常,则返回 结束符时均为不正常 int precision(); //返回浮点数输出精度,即输出的有效数字的位数 返回浮点数输出精度, 返回浮点数输出精度 int precision(int n); //设置浮点数的输出精度为 ,返回此前的输出精度。系统预设 设置浮点数的输出精度为n,返回此前的输出精度。 设置浮点数的输出精度为 //置的输出精度为 ,即输出的浮点数最多具有 位为有效数字 置的输出精度为6,即输出的浮点数最多具有6位为有效数字 置的输出精度为 int rdstate(); //操作正常时返回 ,否则返回非0值,它与good()正好相反 操作正常时返回0,否则返回非 值 它与 正好相反 操作正常时返回 long setf(long f); //根据参数 设置相应的格式化标志,返回此前的设置。该参数 根据参数f设置相应的格式化标志 根据参数 设置相应的格式化标志,返回此前的设置。 // f所对应的实参为无名枚举类型中的枚举常量(又称格式化常 所对应的实参为无名枚举类型中的枚举常量( 所对应的实参为无名枚举类型中的枚举常量 //量),可以同时使用一个或多个常量,每两个常量之间要用按位或 可以同时使用一个或多个常量, 量 //操作符连接。如需要左对齐输出,并使数值中的字母大写时, 操作符连接。 操作符连接 如需要左对齐输出,并使数值中的字母大写时, //则调用该函数的实参为 则调用该函数的实参为ios::left | ios::uppercase 则调用该函数的实参为
第10章 流类库与输入输出 章
10.1 10.2 10.3 10.4 I/O标准流类 标准流类 格式化I/O 格式化 文件流 字符串流
10.1 I/O标准流类 标准流类
预定义流 10.1.2 C++中的流类库 中的流类库
返回首页
语言中, 在C++语言中,数据的输入和输出(简写为 ) 语言中 数据的输入和输出(简写为I/O) 包括对标准输入设备键盘和标准输出设备显示 器 、 对在外存磁盘上的文件和对内存中指定的 字符串存储空间进行输入输出这三个方面。 字符串存储空间进行输入输出这三个方面 。 对 标准输入设备和标准输出设备的输入输出简称 为标准I/O, 为标准 ,对在外存磁盘上文件的输入输出简 称为文件I/O, 称为文件 ,对内存中指定的字符串存储空间 的输入输出简称为串I/O。 的输入输出简称为串 。
返回本节
10.1.2 C++中的流类库 中的流类库
C++语言系统为实现数据的输入和输出定义了一个庞大的类库, 语言系统为实现数据的输入和输出定义了一个庞大的类库, 语言系统为实现数据的输入和输出定义了一个庞大的类库 它 包 括 的 类 主 要 有 ios,istream,ostream,iostream, , , , , ifstream,ofstream,fstream,istrstream,ostrstream , , , , 和 strstream等。 等 其中ios为根基类, 它直接派生四个类 : 输入流类 为根基类, 其中 为根基类 它直接派生四个类:输入流类istream、输出 、 流 类 ostream、 文 件 流 基 类 fstreambase 和 字 符 串 流 基 类 、 strstreambase,输入文件流类 ,输入文件流类ifstream同时继承了输入流类和文 同时继承了输入流类和文 件流基类(当然对于根基类是间接继承),输出文件流类 ofstream同时继承了输出流类和文件流基类 , 输入字符串流类 同时继承了输出流类和文件流基类, 同时继承了输出流类和文件流基类 istrstream同时继承了输入流类和字符串流基类, 输出字符串流 同时继承了输入流类和字符串流基类, 同时继承了输入流类和字符串流基类 同时继承了输出流类和字符串流基类, 类ostrstream同时继承了输出流类和字符串流基类,输入输出流 同时继承了输出流类和字符串流基类 同时继承了输入流类和输出流类, 类iostream同时继承了输入流类和输出流类,输入输出文件流类 同时继承了输入流类和输出流类 fstream同时继承了输入输出流类和文件流基类,输入输出字符串 同时继承了输入输出流类和文件流基类, 同时继承了输入输出流类和文件流基类 流类strstream同时继承了输入输出流类和字符串流基类。 同时继承了输入输出流类和字符串流基类。 流类 同时继承了输入输出流类和字符串流基类
返回本节
10.2.2 使用 成员函数 使用ios成员函数
ios类提供成员函数对流的状态进行检测和进行输入输出格式控制等操 类提供成员函数对流的状态进行检测和进行输入输出格式控制等操 作,每个成员函数的声明格式和简要说明如下: 每个成员函数的声明格式和简要说明如下: int bad(); //操作出错时返回非 值 操作出错时返回非0值 操作出错时返回非 int eof(); //读取到流中最后的文件结束符时返回非 值 读取到流中最后的文件结束符时返回非0值 读取到流中最后的文件结束符时返回非 int fail(); //操作失败时返回非 值 操作失败时返回非0值 操作失败时返回非 void clear(); //清除 清除bad,eof和fail所对应的标志状态,使 所对应的标志状态, 清除 , 和 所对应的标志状态 之恢复为正常状态 //值0,使good标志状态恢复为 标志状态恢复为1 值 , 标志状态恢复为 char fill(); //返回当前使用的填充字符 返回当前使用的填充字符 char fill(char c); //重新设置流中用于输出数据的填充字 重新设置流中用于输出数据的填充字 符为c的值 的值, 符为 的值,返回 //此前的填充字符。系统预设置填充字符为空格 此前的填充字符。 此前的填充字符 long flags(); //返回当前用于 返回当前用于I/O控制的格式状态字 返回当前用于 控制的格式状态字