C++流操纵算子(格式控制)
输入/输出的数据没有指定格式,它们都按缺省的格式输入/输出。然而,有时需要对数据格式进行控制。这时需利用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) | 设置域宽格式变量 |
其它流函数
错误处理
在对一个流对象进行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) | 读取规定长度的字符串到缓冲区中 |
int | peek( ) | 返回流中下一个字符,但不移动文件指针 |
istream& | seekg(streampos) | 移动当前指针到一绝对地址 |
istream& | seekg(streampos,seek_dir) | 移动当前指针到一相对地址 |
streampos | tellg( ) | 返回当前指针 |
istream& | ignore(int n=1,delim=EOF) | 跳过流中几个字符,或直到遇到指定的分界符为止 |
关于::符号的探讨
仔细查找了一下ios类控制符的源文件,可以追溯到头文件ios_base.h,其中包含了很多控制流的变量或方法,而这些成员都被包围在了命名空间std中,代码如下所示。因此,流控制符是std命名空间中的静态常量,::则代表了这些常量来自于std这个命名空间。
1 // 27.4.2.1.2 Type ios_base::fmtflags 2 /** 3 * @brief This is a bitmask type. 4 * 5 * @c "_Ios_Fmtflags" is implementation-defined, but it is valid to 6 * perform bitwise operations on these values and expect the Right 7 * Thing to happen. Defined objects of type fmtflags are: 8 * - boolalpha 9 * - dec 10 * - fixed 11 * - hex 12 * - internal 13 * - left 14 * - oct 15 * - right 16 * - scientific 17 * - showbase 18 * - showpoint 19 * - showpos 20 * - skipws 21 * - unitbuf 22 * - uppercase 23 * - adjustfield 24 * - basefield 25 * - floatfield 26 */ 27 typedef _Ios_Fmtflags fmtflags; 28 29 /// Insert/extract @c bool in alphabetic rather than numeric format. 30 static const fmtflags boolalpha = fmtflags(__ios_flags::_S_boolalpha); 31 32 /// Converts integer input or generates integer output in decimal base. 33 static const fmtflags dec = fmtflags(__ios_flags::_S_dec); 34 35 /// Generate floating-point output in fixed-point notation. 36 static const fmtflags fixed = fmtflags(__ios_flags::_S_fixed); 37 38 /// Converts integer input or generates integer output in hexadecimal base. 39 static const fmtflags hex = fmtflags(__ios_flags::_S_hex); 40 41 /// Adds fill characters at a designated internal point in certain 42 /// generated output, or identical to @c right if no such point is 43 /// designated. 44 static const fmtflags internal = fmtflags(__ios_flags::_S_internal); 45 46 /// Adds fill characters on the right (final positions) of certain 47 /// generated output. (I.e., the thing you print is flush left.) 48 static const fmtflags left = fmtflags(__ios_flags::_S_left); 49 50 /// Converts integer input or generates integer output in octal base. 51 static const fmtflags oct = fmtflags(__ios_flags::_S_oct); 52 53 /// Adds fill characters on the left (initial positions) of certain 54 /// generated output. (I.e., the thing you print is flush right.) 55 static const fmtflags right = fmtflags(__ios_flags::_S_right); 56 57 /// Generates floating-point output in scientific notation. 58 static const fmtflags scientific = fmtflags(__ios_flags::_S_scientific); 59 60 /// Generates a prefix indicating the numeric base of generated integer 61 /// output. 62 static const fmtflags showbase = fmtflags(__ios_flags::_S_showbase); 63 64 /// Generates a decimal-point character unconditionally in generated 65 /// floating-point output. 66 static const fmtflags showpoint = fmtflags(__ios_flags::_S_showpoint); 67 68 /// Generates a + sign in non-negative generated numeric output. 69 static const fmtflags showpos = fmtflags(__ios_flags::_S_showpos); 70 71 /// Skips leading white space before certain input operations. 72 static const fmtflags skipws = fmtflags(__ios_flags::_S_skipws); 73 74 /// Flushes output after each output operation. 75 static const fmtflags unitbuf = fmtflags(__ios_flags::_S_unitbuf); 76 77 /// Replaces certain lowercase letters with their uppercase equivalents 78 /// in generated output. 79 static const fmtflags uppercase = fmtflags(__ios_flags::_S_uppercase); 80 81 /// A mask of left|right|internal. Useful for the 2-arg form of @c setf. 82 static const fmtflags adjustfield = fmtflags(__ios_flags::_S_adjustfield); 83 84 /// A mask of dec|oct|hex. Useful for the 2-arg form of @c setf. 85 static const fmtflags basefield = fmtflags(__ios_flags::_S_basefield); 86 87 /// A mask of scientific|fixed. Useful for the 2-arg form of @c setf. 88 static const fmtflags floatfield = fmtflags(__ios_flags::_S_floatfield);
C++流操纵算子(格式控制)相关推荐
- 《C++程序设计POJ》《WEEK7 输入输出和模板》《流操纵算子》《文件读写》《二进制文件读写》...
函数指针,运算符重载 人懂我精,人精我深 用的时候查一查手册 dat 二进制文件 如果不指定文件夹,就是生成在当前文件夹,什么是当前文件夹?可执行文件所在的文件夹 绝对路径 相对路径 文件的读写指针 ...
- C++知识点16——使用C++标准库(IO流格式控制)
1.IO流的格式控制 1.1 指定整数值的进制 void setdatabase() {cout<<20<<'.'<<1024<<endl;cout&l ...
- C++ I/O流 格式控制(下)
使用I/O操作符进行格式控制 定义在iostream头文件中不带参数的操纵符 操纵符 作用 endl 输出时换行并刷新流 ends 输出时在字符串后插入空字符(NULL)作为尾符 flush 刷新,把 ...
- C++ I/O 流 格式控制(上)
在学习C++这么久以来,虽然一直使用着输入输出流,但是对它们却并没有进行系统的了解和学习.在最近,将它们的一些基本用法进行了一次简单的归纳. 使用ios类的成员函数进行格式控制 格式状态字 C++可以 ...
- C++ IO 格式控制
文章目录 1.流成员函数 2. 操纵符 3.自定义操纵符 参考文献 C 语言中,我们可以通过函数 printf() 和 scanf() 进行格式化控制,而在 C++ 中仍然可继续使用二者,但还提供了以 ...
- C++输出流的格式控制
文章转自:http://hi.baidu.com/rocketxyf/blog/item/2562473114dbad17eac4af5a.html inline SMANIP(long) r ...
- c语言如何输出无限小数,printf的格式控制(C语言)
printf的格式控制的完整格式: % - 0 m.n l或h 格式字符 下面对组成格式说明的各项加以说明: ①%:表示格式说明的起始符号,不可缺少. ②-:有-表示左对齐输出,如省略表示右对齐输出. ...
- c++ IO流---输入输出流 格式控制字符
流:若干字节数据从一端到另一端我们叫做流 例:操作文件,从程序到文件,数据的流动的操作称为流操作 流类体系 专门处理输入输出流.字符流.文件流,包含有: 流对象 流运算符 >> < ...
- C++ 操纵算子原理
C++ 流格式化有两种方式:成员函数和操纵算子,两种等效.类似C的 printf.成员函数进行流格式化操作有些冗长乏味. 操纵算子又分有参和无参两种.无参定义在<iostream>,有参定 ...
最新文章
- JavaScript入门经典(第4版)
- PHP -Casbin: 支持 ACL、RBAC、ABAC 多种模型的 PHP 权限管理框架
- [2020.11.27NOIP模拟赛]拼图王【dp】
- java 重写session_关于session的实现:cookie与url重写
- 通过Gogs部署git仓库
- 240章节!“Python|爬虫|数据分析|机器学习|深度学习”中文版路线图视频(附链接)!...
- 茴香豆的n种写法之①——linQ Join写法
- uac2+android,iBasso UAC
- 阿里p7程序员哀叹:35岁,被通知合同不再续签
- HJ82 将真分数分解为埃及分数(需要知道求埃及数的数学方法)
- SS-Model【3】:DeepLabv2
- VR全景制作的展示方式你了解多少?具体有哪些?
- 网络营销中的几个常见基本术语
- 关于酷狗音乐api搜索歌手信息的问题
- MEM/MBA数学强化(05)应用题
- Dota之后,《王者荣耀》也被AI攻陷,势把人类顶级玩家拉下马
- 保利威HTML5播放器使用文档(参考备用)
- 【Transformer】16、SegFormer:Simple and Efficient Design for Semantic Segmentation with Transformers
- iqooneo3 如何不用vivo账号下载外部应用_vivo遭大量家长投诉背后:利益凌驾责任之上...
- 利用前景和背景的mask图来得到边缘平滑的图像(graphcut实现)
热门文章
- java io流顶层_Java中的IO流(一)
- linux 脚本socket通信,Linux实例:用socket通讯远程执行命令
- mysql联表查询多记录显示_数据库:MySQL(多表的表记录的查询)(三)
- 【CV秋季划】图像质量提升与编辑有哪些研究和应用,如何循序渐进地学习好?...
- 【技术综述】基于弱监督深度学习的图像分割方法综述​
- 山西省能源产业发展动向及投资风险分析报告2021版
- 中国伺服电机行业运营现状及前景趋势展望报告2022-2028年版
- 微机原理及接口技术-6
- java报错 pom.xml第一行报org.apache.maven.archiver.MavenArchiver.getManifest(org.apache.maven.project......
- 【学习笔记】Sass入门指南