读 《C++ Primer Plus》第17章1-3节
一 输出
cstdio(stdio.h) cstring(string.h) iostream(iostream.h) cmath(math.h)
1. 输出字符串的地址:cout<<(void *)amount
对于没有void*类型的系统,则要强制转换成unsigned或unsigned long类型
2. ostream的两个输出方法:
a) ostream & put(char); 在原型合适的情况下,可以将数值型参数用于put,让函数原型自动将参数转换为正确的char值。
b) basic_ostream<char T,traints>& wirte(const char_type* s, streamsize n); 第一个参数为要显示的字符串的地址,第二个参数指出要显示多少个字符。返回类型为ostream &. 该函数不会将数字转换位相应的字符,而是传输内存中存储的位表示。例如4字节的long值将最为4个独立的字节被输出。输出设备将把每个字节作为ASCII码表示。
3. 刷新缓冲区:
a) 输入即将发生时刷新缓冲区
b) 将换行符发送到缓冲区后,将刷新缓冲区
强制刷新缓冲区:
cout<<flush;(刷新buffer) 也可以使用flush(cout);
cout<<endl;(刷新buffer并且插入一个换行符)
4. 用cout进行格式化
a) 修改显示的使用的计数系统
i. 使用dec,hex,oct,即dec(cout)
ii. cout<<hex;直到下一次改变输出方式时为止
b) 调整字段的宽度
i. int width() 返回字段宽度的当前设置
ii. int width(int i) 设置字段宽度为i个空格,并返回以前的字段宽度
width方法只影响接下来显示的一个项目,然后字段宽度将恢复为默认值。
用法如下:cout<<”#”;cout.width(12);cout<<12<<”#”;
默认为右对齐。
c) 设计填充字符 cout.fill(character); 新的填充字符将一直有效,只到更改它为止。
d) 设计浮点数的显示精度cout.precision(2); 一直有效,直到被更改
默认模式下,它指的是显示的总位数。在定点模式和科学模式下,精度值的是小数点后的位数。
e) 打印末尾的0和小数点 cout.setf(ios_base::showpoint);
如果使用的是iostream.h则可能是ios::showpoint
cout.setf(fmtflags)的一些位置常量的说明(fmtflags是bitmask(存储各个位值的类型)的typedef形式)
Constant |
Meaning |
ios_base::boolalpha |
输入和输出bool值,可以为true或false cout<<true |
showpoint |
显示末尾的小数点 |
fixed/scientific |
指定为定点/科学计数(显示末尾的0) |
showbase |
对于输出,使用C++前缀 |
uppercase |
十六进制,使用大写字母;E表示法 |
showpos |
在正数前面加+,仅对于十进制 |
cout.setf(long,long)的说明(返回值是,ios_base::fmtflags):
第二个参数 |
第一个参数 |
含义 |
ios_base::basefield |
ios_base::dec |
使用基数10 |
|
oct |
8 |
|
ios_base::hex |
使用基数16 |
ios_base::floatfiled |
fixed |
使用定点计数法 |
|
scientific |
使用浮点计数法 |
ajustfiled |
left |
左对齐 |
|
right |
右对齐 |
|
internal |
符号或基数前缀左对齐,值右对齐 |
内部对齐是指的是:将符号或基数前缀放在字段的左侧,余下的数字放在字段的右侧。
void unsetf(fmtflags mask); 消除设计位
启用默认模式的方法:
cout.setf(ios_base::showpoint);
cout.unsetf(ios_base::floatfiled);
boolalpha, noboolalpha, showbase, noshowbase, showpoint, showpos, unshowpos, uppercase, nouppercase iternal, left, right, dec, hex, oct, fixed, oct, scientific |
用法如:cout<<left<<”hello world”;
iomanip提供的控制符:
setprecision(),setfill(),setw();
用法如普通控制符,如cout<<setfill();