C++输入/输出流

C++输入/输出流

一、流

低级I/O功能(如无格式的I/O):通常指大量的字节在设备到内存或内存到设备的简单传输。

高级I/O功能(格式化I/O):它将字节组合成有意义的单元,如数据类型。

对于大容量文件的处理,使用无格式的I/O可获得最佳的性能。

 

二、成员函数get和getline

不带参数值成员函数get ,从指定的流中读取一个字符(即使是空格),并返回该字符作为该函数的调用值。遇到文件结束时返回EOF。

get          函数还可以带3个参数:接收字符的字符型数组,数组大小和分隔符(默认

为'/n'),从输入流中读取数据时,读取到比指定的最大字符数少一个字符中止,或者读取到指定的分隔符终止。为了使字符串数组(被程序用作缓冲区)中的输入字符串结束,空字符会被插入到字符数组中。分隔符不会被存储在数组中,但仍保留在输入流中(下一个要被读取的字符),所以除非分隔符从输入流中刷新,否则紧接着的第二个get操作结果就是空行。

getline    函数的操作与带3个参数的get成员函数类似,读取一行字符串后在字符串数组中插入一个空格,不同的是getline会从输入流中删除分隔符,而不是把它放入数组。

 

三、ignore 用于跳过指定数量的字符(默认1)或转到指定的分隔符(默认EOF),

在读取文件该分隔符可使ignore跳到文件末尾终止输入。

putback  的作用是把上次从输入流中通过get取得的字符在放回该输入流中。对于应用

程序需要扫描输入流以查找以特定字符开头的字段来说,非常有用。

peek       的功能是返回输入流一下个字符,而不是从输入流中删除该字符。

 

四、成员函数read,gcount,write的无格式输入/输出

read

write       专用于处理无格式的输入/输出。它们负责把一定量的字节输入内存的数

组,以及从内存数组中输出字节(未被格式化)。

gcount    可以统计最后一次输入操作读取的字符数。

 

五、流操纵元

用来完成格式化I/O,诸如设置域宽,设置精度,设置和清除格式化标志,设置字段填充字符,刷新流,在输入流中插入一行并刷新流,在输出流中插入空白字符,跳过输入流的空白字符等功能。

 

1、 数流基数

dec         oct         hex         setbase  (如setbase10)十进制)

      十进制     八进制      十六进制   参数化流操纵元

 

2、 设置浮点数的精度

精度一旦设置,就可用语以后所有的输出流操作,直至精度发生变化。

cout.precision( num );

setprecision( num );

                    

3、设置域宽:

setw

width      宽度的设置仅使用于下一行的流插入或流读取,在该次操作完成

之后,宽度就被置回0(即输出值按照所需的宽度来输出)不带参数的width函数返回当前的设置。

 

六、流格式装备

各种格式标志指定了即将在I/O流操作期间执行的格式类型,成员函数setfunsetfflags用语设置控制标志。

举例:     cout.setf( iso::showpos )   指定正负数前要加+和-号

               cout.setf( iso::scientific )指定浮点数输出采用科学记数法

                cout.setf( iso::left )

                cout.setf( iso::right )         左/右对齐输出

 

七、流错误状态

ios类中的位可用于测试流的状态

遇到文件结束符之后,将为输出流设置eofbit位。调用成员函数来确定是否已经遇到了文件结束符。

流中发生格式错误时,虽然会设置failbit,但字符不会丢失。成员函数fail判断流操作是否失败,这种错误通常可修复。

发生导致数据丢失的错误时,设置dadbit。成员函数bad判断留操作是否失败,这种严重的错误通常不可修复。

如果以上的3状态没有设置,则设置goodbit

测试流状态较好的方法是使用成员函数eofbadfailgood

clear通常用于把一个流状态恢复为"good",从而可以对该流继续执行I/O操作,由于其默认参数ios::goodbit利用语句  cin.clear()

例:cin.clear( ios::failbit )为流设置了failbit。

 

八、把输出流连接到输入流

成员函数tie以同步istream和ostream 的操作以保证输出在输入之前显示出来

例: cin.tie( &cout );不过这个C++会自动执行。

           Inputstream.tie( 0 ) 解除从输出流到输入流的连接

       文件的拷贝:(将to.txt中的内容全部复制到from.txt)

strstreams介绍:

       istrstream::istrstream( char* buf );

       //取一个指向零终止符数组的指针;可以提取字节直到零为止。

       istrstream::istrstream( char* buf, int size );

       //可以一直提取字节到buf[size],而不管是否遇到了一个零。

       ostrstream::ostrstream( char*, int, int = ios::out );

       // char*                 是预分配的缓冲区,在那里字符将结束

       // int                     缓冲区的大小

       // int = ios::out      模式,如果缺省,字符从缓冲区的开始地址格式化。

关于ostrstream,需要记住的一点:没有为我们插入一般在字符数组末尾所需要的零终止符。当我们准备好零终止符时,用特别操纵算子ends。

posted on 2009-04-02 21:47  Kevin Game  阅读(281)  评论(0编辑  收藏  举报