# 输入输出 ## 概述 头文件iostream和fstream中定义的一组类。这个类库不是正式语言的组成部分,cin和istream都不是关键字。 C++程序将输入输出看作字节流。输入时程序从输入流中抽取字节;输出时程序将字节插入到输出流中。输入流中的字节可以来自键盘,也可以来自存储设备或者其他程序。同样,输出流中的字节可以流向屏幕、打印机、存储设备或者其他程序。流充当了程序和其他目标的桥梁。 通常使用缓冲区可以高效地处理输入输出。 ## cout输出 ### 1. 修改显示时使用的计数系统 ostream从ios类派生而来,ios类从ios_base类派生而来。ios_base类存储了格式状态信息。通过使用控制符可以控制显示整数时使用的计数系统。由于ios_base是ostream的间接基类,所以ios_base方法也可以用于ostream对象。 要控制整数以十进制、二进制还是十六进制显示,可以使用dec、hex、oct控制符。 ```C++ hex(cout); cout << hex; //两种使用方法是一样的 ``` ### 2. 调整字段宽度 新的宽度设置只对下一次输出有效。 ```C++ cout.width(20); ``` ### 3. 填充字符 默认情况下,cout用空格填充字段中未被使用的部分,也可以使用fill()成员函数来改变填充字符。新的填充设置将一直有效。 ```C++ cout.fill('*'); ``` ### 4. 设置浮点数的显示精度 默认显示总位数,浮点数为六位。在定点模式和科学模式下。新的进度设置将一直有效。 ```C++ cout.precision(2); ``` ### 5. 打印末尾的0和小数点 ```C++ cout.setf(ios_base::showpoint); ``` ### 6. setf() setf()方法控制了小数点被显示时,其他几个格式选项。其函数原型为两种。 ```C++ fmtflags setf(fmtflags); fmtflags setf(fmtflags, fmtflags); ``` 单参数选项 | 常量 | 含义 | | ------------------- | ------------------------------------- | | ios_base::boolalpha | 输入输出bool值时,可以为true或者false | | ios_base::showbase | 输出使用C++基数前缀(0,0x) | | ios_base::showpoint | 显示末尾的小数点 | | ios_base::uppercase | 16进制输出使用大写字母表示法 | | ios_base::showpos | 在正数前面加上+号 | 双参数选项 | 参数一 | 参数二 | 含义 | | -------------------- | --------------------- | -------------------- | | ios_base::dec | ios_base::basefield | 使用基数10 | | ios_base::oct | ios_base::basefield | 使用基数8 | | ios_base::hex | ios_base::basefield | 使用基数16 | | | | | | ios_base::fixed | ios_base::floatfield | 使用定点计数法 | | ios_base::scientific | ios_base::floatfield | 使用科学计数法 | | | | | | ios_base::left | ios_base::adjustfield | 使用左对齐 | | ios_base::right | ios_base::adjustfield | 使用右对齐 | | ios_base::internal | ios_base::adjustfield | 符号左对齐,值右对齐 | ```C++ ios_base::fmtflags old = cout.setf(ios::left, ios::adjustfield); //恢复之前的设置使用 cout.setf(old, ios::adjustfield) ``` ### 7. 标准控制符 | 控制符 | 调用原型 | | ----------- | ------------------------------------------------ | | boolalpha | setf(ios_base::boolalpha) | | noboolalpha | unsetf(ios_base::boolalpha) | | showbase | setf(ios_base::showbase) | | noshowbase | unsetf(ios_base::showbase) | | showpoint | setf(ios_base::showpoint) | | noshowpoint | unsetf(ios_base::showpoint) | | showpos | setf(ios_base::showpos) | | noshowpos | unsetf(ios_base::showpos) | | uppercase | setf(ios_base::uppercase) | | nouppercase | unsetf(ios_base::uppercase) | | internal | setf(ios_base::internal, ios_base::adjustfield) | | left | setf(ios_base::left, ios_base::adjustfield) | | right | setf(ios_base::right, ios_base::adjustfield) | | dec | setf(ios_base::dec, ios_base::basefield) | | hex | setf(ios_base::dec, ios_base::basefield) | | oct | setf(ios_base::oct, ios_base::basefield) | | hex | setf(ios_base::hex, ios_base::basefield) | | fixed | setf(ios_base::fixed, ios_base::floatfield) | | scientific | setf(ios_base::scientific, ios_base::floatfield) | ## cin输入