C++ Stream 的输入/输出格式控制

原文地址:http://wonderow.cnblogs.com/archive/2005/06/21/178719.html

格式控制

    在前面,输入/输出的数据没有指定格式,它们都按缺省的格式输入/输出。然而,有时需要对数据 格式进行控制。这时需利用ios类中定义的格式控制成员函数,通过调用它们来完成格式的设置。ios类的格式控制函数如下所示:

long flags( ) const返回当前的格式标志。
long flays(long newflag)设置格式标志为newflag,返回旧的格式标志。
long setf(long bits)  设置指定的格式标志位,返回旧的格式标志。
long setf(long bits,long field)将field指定的格式标志位置为bits,返回旧的格式标志。
long unsetf(long bits)清除bits指定的格式标志位,返回旧的格式标志。
long fill(char c) 设置填充字符,缺省条件下是空格。
char fill( )  返回当前填充字符。
int precision(int val) 设置精确度为val,控制输出浮点数的有效位,返回旧值。
int precision( )返回旧的精确度值。
int width(int val)     设置显示数据的宽度(域宽),返回旧的域宽。
int width( ) 只返回当前域宽,缺省宽度为0。这时插入操作能按表示数 据的最小宽度显示数据。 

预定义的操纵算子
    使用成员函数控制格式化输入输出时,每个函数调用需要写一条语句,尤其是它不能用在插入或提取运算符的表达式中,而使用操纵算子,则可以在插入和提取运算符的表达式中控制格式化输 入和输出。在程序中使用操纵算字必须嵌入头文件 
iomanip.h

dec十进制的输入输出
hex十六进制的输入输出
oct  八进制的输入输出
ws  提取空白字符
ends  输出一个nul字符
endl  输出一个换行字符,同时刷新流
flush刷新流
resetiosflags(long)请除特定的格式标志位
setiosflags(long)设置特定的格式标志位
setfill(char)设置填充字符
setprecision(int)设置输出浮点数的精确度
setw(int)设置域宽格式变量


setiosflags(long)常用的有:
ios_base::fixed固定的浮点显示
ios_base::scientific指数表示
ios_base::left 左对齐
ios_base:right 右对齐
ios_base::skipws忽略前导空白

ios_base::showpos //正数前加+
ios_base::showpoint //总是显示小数点
ios_base::uppercase //十六进制大写A..F,浮点数大写E
ios_base::showbase //八进制前加0,十六进制前加0x

其它流函数

错误处理 
    在对一个流对象进行I/O操作时,可能会产生错误。当错误发生时,错误的性质被记录在ios类的一个数据成员中。 
ios类中定义的描述错误状态的常量:

goodbit  没有错误,正常状态  eofbit 到达流的结尾  
failbitI/O操作失败,清除状态字后,可以对流继续进行操作。
badbit试图进行非法操作,清除状态字后,流可能还可以使用。
hardfail致命错误,不可恢复的错误。

ostream类的成员函数
流的其它成员函数可以从流中读取字符或字符串,对流进行无格式化的输入 输出操作,以及直接控制对流的I/O操作。

返回类型ios类的成员描      述
ostream*tie(ostream*)   将当前流与指定的输出流连接起来。每当需要 读取当前流时,连接的流会自动刷新。C++流库已用cin.tie(cout)将输入流与输出流连接起来。要取消与输出流的连接可采用is.tie(0)
ostream*tie( )返回指向连接流的指针


返回类型ostream类的成员描      述
ostream&put(char ch)向流中输出一个字符ch,不进行任何转换
ostream&write(char*,int)向流中输出指定长度的字符串,不进行转换
ostream& flush( )刷新流,输出所有缓冲的但还未输出的数据
ostream&seekp(streampos)移动流的当前指针到给定的绝对位置
ostream&seekp(sereamoff,seek_dir)流的当前指针类似与文件的当前指针
streamposteelp( )返回流的当前指针的绝对位置

istream类的成员函数

返回类型istream类的成员描        述
intget( )读取并返回一个字符
istream&get(char&c)读取字符并存入c中
istream&get(char*ptr,int len,char delim='')读取指定的字符到缓冲区中,直到遇到指定的分界符为止,分界符不填入缓冲区。
istream&getline(char*ptr,int len,char delim='')与get(char*ptr,int len,chardelim ='') 类似,但将分界符填 入缓冲区。
istream&putback( )将最近读取的字符放回流中
istream&read(char*,int)
读取规定长度的字符串到缓冲区中
函数gcount()返回读取的字节数
intpeek( ) 返回流中下一个字符,但不移动文件指针
istream&seekg(streampos)移动当前指针到一绝对地址
istream& seekg(streampos,seek_dir)移动当前指针到一相对地址
streampostellg( )返回当前指针
istream&ignore(int n=1,delim=EOF)跳过流中几个字符,或直到遇到指定的分界符为止

getch()函数用于从键盘输入一个字符,不回显,包含头文件<conio.h>中 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言中的文件输入输出可以通过标准库中的函数来实现。常用的函数有fopen、fclose、fread、fwrite、fgets、fputs等。 首先,可以使用fopen函数打开一个文件,语法如下: ```c FILE *fopen(const char *filename, const char *mode); ``` 其中filename是要打开的文件名(包括路径)。mode是以何种方式打开文件,常用的模式有: - "r":只读方式打开文件,文件必须存在; - "w":写入方式打开文件,如果文件不存在则创建新文件,如果文件已存在则清空文件内容; - "a":追加方式打开文件,如果文件不存在则创建新文件,如果文件已存在则在文件末尾追加内容。 fopen函数返回一个指向FILE结构的指针,用于后续对文件的操作。 接下来,可以使用fread和fwrite函数进行二进制输入输出,语法如下: ```c size_t fread(void *ptr, size_t size, size_t count, FILE *stream); size_t fwrite(const void *ptr, size_t size, size_t count, FILE *stream); ``` 其中ptr是存储数据的缓冲区地址,size是每个数据元素的大小(单位为字节),count是要读取/写入的数据元素个数,stream是要进行操作的文件指针。 另外,可以使用fgets和fputs函数进行文本输入输出,语法如下: ```c char *fgets(char *str, int n, FILE *stream); int fputs(const char *str, FILE *stream); ``` 其中str是存储数据的字符数组地址,n是最大读取/写入字符数(包括换行符),stream是要进行操作的文件指针。 最后,使用fclose函数关闭文件,语法如下: ```c int fclose(FILE *stream); ``` 其中stream是要关闭的文件指针。 需要注意的是,在进行文件操作时,应该先判断文件是否成功打开。可以通过判断fopen函数的返回值是否为NULL来确定文件是否成功打开。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值