1、(5)(stream_extraction operator)(6)”)运算符在缺省情况下是跳过空白(包括空格,制表,backspace和回车等)的,这样拷贝的文件会缺少一些字符。第二,该程序应能确定文件是否拷贝结束。按行进行拷贝,getline()回车换行符并不放在buf中,因此要加一个回车换行符。9.2.9 对文件流,“!”运算符完成什么功能?返回状态字state操作非法和操作失败这两位。9.2.10 二进制文件读函数read()能否知道文件是否结束?应怎样判断文件结束?读函数并不能知道文件是否结束,可用状态函数int ios:eof()来判断文件是否结束。必须指出系统是根据当前操作的实际
2、情况设置状态位,如需根据状态位来判断下一步的操作,必须在一次操作后立即去调取状态位,以判断本次操作是否有效。9.2.11 由二进制文件和文本文件来保存对象各有什么优点和缺点?使用二进制文件,可以控制字节长度,读写数据时不会出现二义性,可靠性高。同时不知格式是无法读取的,保密性好。文件结束后,系统不会再读(见eofbit的说明),但程序不会自动停下来,所以要判断文件中是否已没有数据。使用文本文件来保存对象,操作简单,但谁都可以读取这些数据,无保密性。9.2.12 文件的随机访问为什么总是用二进制文件,而不用文本文件?在C+中可以由程序来实现文件指针的移动,从而实现文件的随机访问,即可读写流中任意
3、一段内容。一般文本文件很难准确定位,所以随机访问多用于二进制文件。9.2.13 怎样使用istream和ostream的成员函数来实现随机访问文件?在ios类中说明了一个公有枚举类型:enum seek_dir beg=0,/文件开头 cur=1,/文件指针的当前位置 end=2/文件结尾;istream类中提供了如下三个成员函数:istream&istream:seekg(streampos);/指针直接定位seekg(streamoff, ios:seek_dir);/指针相对定位long istream:tellg();/返回当前指针位置seekg(streamoff,ios:seek_
4、dir)应用最广,如: datafile.seekg(-20L,ios:cur);表示将文件定位指针从当前位置向文件头部方向移20个字节。 datafile.seekg(20L,ios:beg);表示将文件定位指针从文件头向文件尾方向移20个字节。end);表示将文件定位指针从文件尾向文件头方向移20个字节。tellg()和seekg()往往配合使用。ostream类也提供了三个成员函数管理文件定位指针,它们是:ostream&ostream:seekp(streampos);seekp(streamoff,ios:long ostream:tellp();定位指针只有一个但函数有两组,这两组个函数功能完全一样。二. 编程与综合练习题9.3 编程实现以下数据输入输出:a) 以左对齐方式输出整数,域宽为12;b) 以八进制、十进制、十六进制输入输出整数;c) 实现浮点数的指数格式和定点格式的输入输出,并指定精度;d) 把字符串读入字符型数组变量中,从键盘输入,要求输入串的空格也全部读入,以回车换行符结束;e) 以上要求用流成员函数和流操作子各做一遍。解:特别注意flags()和setf()的使用方法。注意