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

转载 2012年03月23日 09:06:11

原文地址: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 到达流的结尾  
failbit I/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) 流的当前指针类似与文件的当前指针
streampos teelp( ) 返回流的当前指针的绝对位置

istream类的成员函数

返回类型 istream类的成员 描        述
int get( ) 读取并返回一个字符
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()返回读取的字节数
int peek( )  返回流中下一个字符,但不移动文件指针
istream& seekg(streampos) 移动当前指针到一绝对地址
istream&  seekg(streampos,seek_dir) 移动当前指针到一相对地址
streampos tellg( ) 返回当前指针
istream& ignore(int n=1,delim=EOF) 跳过流中几个字符,或直到遇到指定的分界符为止

getch()函数用于从键盘输入一个字符,不回显,包含头文件<conio.h>中 

使用ifstream来读取txt文件,控制…

#include #include using namespace std; int main() { ifstream fin("hello.txt"); while (fin!=NULL) {...
  • rxm1989
  • rxm1989
  • 2014年09月25日 13:28
  • 1312

C++ 标准文件的写入读出(ifstream,ofstream)

头文件 < fstream> c++中有一个stream,所有的I/O都是以这个流类为基础的。继承结构如下图: a.””析取器,向流输出数据; 我们主要讨论ifstream和ofstream ...
  • a125930123
  • a125930123
  • 2016年12月09日 17:32
  • 4614

C++文件读写详解(ofstream,ifstream,fstream)

在看C++编程思想中,每个练习基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含义,在看了几位大牛的博文后,进行整理和总结: 这里主要是讨论fstream...
  • kingstar158
  • kingstar158
  • 2011年10月10日 16:33
  • 491077

C++ stream格式化输出输入

本文摘自C++primer第四版附录A3 A.3.3. 控制输出格式 许多操纵符使我们能够改变输出的外观。有两大类的输出控制:控制数值的表示,以及控制填充符的数量和布局。 控制布尔值和格式 改...
  • kamaliang
  • kamaliang
  • 2011年09月02日 16:20
  • 3051

C++ iostream 输入输出流格式控制

使用这些格式需要声明包含 long flags( ) const 返回当前的格式标志。  long flays(long newflag) 设置格式标志为newflag,返回旧的格式标志。  ...
  • lcg910978041
  • lcg910978041
  • 2017年09月01日 21:17
  • 178

C++ 文件流

要求: 掌握文本文件读写的方法 了解二进制文件的读写方法   C++文件流: fstream// 文件流 ifstream// 输入文件流 ofstream// 输出文件流   //...
  • observadores
  • observadores
  • 2018年02月10日 16:02
  • 0

C++中cout控制输出格式和读写txt文件

标题里面包含了两方面内容,一方面是cout控制输出格式,一方面是读写.txt文件中的数据。平常在代码中用的都挺多的。 这些别的都总结的比较好,下面分别给出其参考链接,并附上自己的常用方式源码。cou...
  • NNNNNNNNNNNNY
  • NNNNNNNNNNNNY
  • 2016年03月31日 19:31
  • 1810

C++输入输出的格式控制1

》默认的输入输出格式         在没有特地进行格式控制的情况下,输入输出采用默认格式。         >默认的输入格式         C++流所识别的输入数据的类型及其默认的输入格式:...
  • darkxiaoming
  • darkxiaoming
  • 2017年04月23日 13:17
  • 450

C++标准输入输出格式控制(进制)

从HDU--2057题说起 刚开始做,以为这题是大数加减问题,试了半天发现太复杂,要考虑的因素太多,后来知道long long能表示16位十六进制的整数,题目中为15位,可以直接加减,百...
  • qq1169091731
  • qq1169091731
  • 2016年06月12日 14:54
  • 865

文件流的操作

ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; 在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/...
  • qq_36983118
  • qq_36983118
  • 2018年01月02日 16:44
  • 35
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ Stream 的输入/输出格式控制
举报原因:
原因补充:

(最多只允许输入30个字)