七、输入/输出流--IOStreamm基本类和标准IOStream对象--头文件和标准操纵符
来源:互联网 发布:淘宝正品耐克 编辑:程序博客网 时间:2024/06/04 19:53
IOStreamm基本类和标准IOStream对象
本节主要讲述:
- 相关头文件
- 标准Stream操作符
1. 相关的头文件
<iosfwd>
<streambuf>
<istream>
<ostream>
<iostream>
在使用这些标准输入或输出功能时,包含istream或者ostream头文件即可。如果不需要使用标准stream对象,就不需要包含iostream头文件。
如果需要使用特殊的stream,如file streams ,string stream, 参数化的操控器等,需要包含其他头文件,如<fstream>
,<sstream>
等
2.标准stream操作符
主要介绍:
- Output操作符
- input操作符
- 特殊型别的I/O操作符的格式化
2.1.Output操作符
- basic_ostream(ostream和wostream)将“<<”定义为Output操作符,对所有基本类型进行重载,包括
char* , void* , bool
等。(算术类型和流类型的重载) - stream将output操作符定义为:把第二参数发送到相应的stream中。第二参数可以是任意型别。(操控器)
4种输出操作符(操控器)重载的声明:
basic_ostream& operator<< (basic_ostream& (*pf)(basic_ostream&));basic_ostream& operator<< ( basic_ios<char_type,traits_type>& (*pf)(basic_ios<char_type,traits_type>&));basic_ostream& operator<< (ios_base& (*pf)(ios_base&));basic_ostream& operator<<( std::basic_ostream<CharT,Traits>& (*func)(std::basic_ostream<CharT,Traits>&) );
2.2.input操作符
- basic_istream将”>>”定义为input操作符。
- basic_istream对基本类型定义了重载”>>”;(算术类型和流缓冲类型的重载)
- basic_istream定义input操作符:读取的数值存储在第二个参数,传递方式为箭头方向。(操控器)
操控器的声明:
basic_istream& operator>>( basic_istream& st, std::ios_base& (*func)(std::ios_base&) );basic_istream& operator>>( basic_istream& st, std::basic_ios<CharT,Traits>& (*func)(std::basic_ios<CharT,Traits>&) );basic_istream& operator>>( basic_istream& st, std::basic_istream& (*func)(std::basic_istream&) );
2.3 特殊型别的I/O
标准I/O操作符定义了 bool 、char* 和void*型别的输入和输出。
bool:
1. 默认情况下,布尔值的读取和输出是以数字的形式出现。
- True: 1
- false:0
2.设立了stream的格式化选项,可以字符串的形式对布尔值进行I/O操作。
char*:
对于char*型的字符串,读入字符串时,会跳过开头的空格知道非空格或者文件结束。空格的跳过可以,可以由skipws标志控制
void*:
型别为void*的参数被传递到output操作符的时候,其地址被输出,而不是输出指针指向的内容。
例子:
char * str = "hello!";//输出地址需要void*cout << "char* : " << str << " 地址为: " << static_cast<void*>(str) << endl; cout << "void*: " << (void*)str << endl;
结果为:
char* : hello! 地址为: 000B1D88void*: 000B1D88
2.4 操纵符
标准操纵符,(操控器或操作符都可)定义在名称空间std中,
1. 针对ios_base的操纵符有<ios>
给出。
2. 针对istream和ostream操纵符由<iostream>
给出
3. 复杂的由<iomanip>
给出
(1).格式化标记
(以下表中前面带“*”,表示默认格式状态)
* noshowbase
不生成表示进制的前缀 showpoint 对浮点数总是显示小数点 * noshowpoint
只有当浮点数包含小数点部分时才显示小数点 showpos 对非负数显示+ * noshowpos
对非负数不显示 + uppercase 在十六进制中打印0X,在科学计数法中打印E * nouppercase
在十六进制中打印0x,在科学计数法中打印e * dec
整数值显示十进制 hex 整数值显十六进制 oct 整数值显示八进制 left 在值的右侧添加填充字符 right 在值的左侧填充填充字符,右对齐 internal 在符号和值之间填充字符 fixed 浮点数显示为定点十进制 scientific 浮点数显示为科学计数法 hexfloat 浮点数值显示为十六进制 【c++11】 defaultfloat 重置浮点数格式为十进制【c++11】 unitbuf 每次输出操作刷新缓冲区 *nounitbuf
回复正常的缓冲区刷新方式 * skipws
输入运算跳过空白符 noskipws 输入运算符不跳过空白符(2) 格式化操纵符
<iomanip>
flush() 刷新ostream 缓冲区 ends() 插入空白符,然后刷新ostream缓冲区 endl() 插入换行,然后刷新缓冲区(3)部分格式化函数
需要通过stream类对象来调用这些函数
- fill() :防止当前填充字符
- fill(int ch) : 设置填充字符,返回先前填充字符
- precision(): 返回当前精度
- precision(int p): 设置精度
- setf(int m ): 设置掩码m的or表达式标记,返回先前的标记
- setf(int m1,int m2): 设置掩码m1,关闭掩码m2
- unsetf(int m): 关闭掩码m的or表达式中的标记
- width() : 返回当前的宽度
- width(int w): 设置宽度为w,返回先前的宽度
例子:
// boolalpha cout << "默认:" << true << " " << false << endl; cout << "boolalpha: " <<boolalpha<< true << " " << false << endl; cout << noboolalpha << endl; //恢复 //指定进制 cout << showbase; cout << "默认十进制:" << 20 << endl; cout << "八进制: " << oct << 20 << endl; cout << "十六进制: " << hex << 20 << endl; cout << dec<<noshowbase << endl; //精度 cout << "当前精度: " << cout.precision() << ", 值:" << sqrt(2.0) << endl; cout << "修改精度,返回之前精度: " << cout.precision(8) << ", 值: " << sqrt(2.0) << endl;//也可采用setprecision(8) //补空,字符的显示宽度setw() 定义于头文件 <iomanip> int i = 12; double d = 3.12345; cout << showpos;//显示非负数符号 cout << "数: " << setw(12) <<i<< ":尾部" << endl; cout << "数: " << setw(12) << d<< ":尾部" << endl; cout << setfill('#')//填充空白 << "数: " << setw(12) << i << ":尾部" << endl << "数: " << setw(12) << d << ":尾部" << endl;
结果为:
默认:1 0boolalpha: true false默认十进制:20八进制: 024十六进制: 0x14当前精度: 6, 值:1.41421修改精度,返回之前精度: 6, 值: 1.4142136数: +12:尾部数: +3.12345:尾部数: #########+12:尾部数: ####+3.12345:尾部
阅读全文
0 0
- 七、输入/输出流--IOStreamm基本类和标准IOStream对象--头文件和标准操纵符
- 七、输入/输出流--IOStreamm基本类和标准IOStream对象--stream状态
- 七、输入/输出流--IOStreamm基本类和标准IOStream对象--未格式化输入和输出函数
- linux输出·输入文件和标准输入 标准输出
- linux输出·输入文件和标准输入 标准输出
- 文件IO---标准输入、标准输出和标准错误
- 标准输入和标准输出的read_write
- IO —— 标准输入流和标准输出流
- 【我的Java笔记】标准输入和标准输出流
- Java标准输入和输出
- 标准输入、输出和错误
- 标准输入,标准输出和标准出错的缓冲
- Python重定向标准输入、标准输出和标准错误
- 字节流和字符流转换、标准输入流和标准输出流、打印流、对象序列化、随机流
- Linux标准输入、输出和错误输出
- C++的输入和输出与标准输出流
- C++的输入和输出与标准输出流
- C++的输入和输出与标准输出流
- Java反射
- Android中webView自适应屏幕
- HDU 5536 Chip Factory(暴力/01字典树)
- java
- 【HDU6153】A Secret(扩展KMP)
- 七、输入/输出流--IOStreamm基本类和标准IOStream对象--头文件和标准操纵符
- MFC之CreateWindowEx函数
- BufferedReader和BufferedWriter、PrintStream和PrintWriter
- SETP7 Professional V11 SP1
- Effective c++ 读书笔记
- html页面使用smarty拼接字符串
- 移动端网页适配的理解
- 查看本地起工程部署war包的地址位置
- json数值转化为list<DTO>