C++的I/O由流(stream)完成,常用的有class istream(输入流)、class ostream(输出流)。IOStream程序库定义了数个iostream全局对象:
对象 | 型别 | 说明 |
---|---|---|
cin | istream | 标准输入通道,OS将其常与键盘连接 |
cout | ostream | 标准输出通道,OS将其常与屏幕连接 |
cerr | ostream | 标准错误输出通道,与屏幕连接,缺省情况下无缓冲 |
clog | ostream | 标准日志通道,连接于cerr连接的设备,clog有缓冲 |
wcin | wistream | 从标准输入通道读入宽字符数据 |
wcout | wostream | 将宽字符数据写到标准输出通道 |
wcerr | wostream | 将宽字符数据写到标准错误输出通道 |
wclog | wostream | 将宽字符日志信息写到标准日志通道 |
操控器是专门用来控制stream的对象,只会改变输入或输出方式。IOStream中常见的操控器:
操控器 | 类别 | 意义 |
---|---|---|
endl | ostream | 输出’\n’并刷新output缓冲区 |
ends | ostream | 输出’\0’ |
flush | ostream | 刷新output缓冲区 |
ws | istream | 读入并忽略空格 |
输入用的成员函数:
成员函数 | 读取,直到… | 字符数 | 添加结束符号 |
---|---|---|---|
get(s,sum) | 不包括new line或EOF | 最多num-1 | 是 |
get(s,sum,t) | 不包括t或EOF | 最多num-1 | 是 |
getline(s,sum) | 包括new line或EOF | 最多num-1 | 是 |
getline(s,sum,t) | 包括t或EOF | 最多num-1 | 是 |
read(s,num) | EOF | num | 否 |
readsome(s,sum) | EOF | 最多num | 否 |
格式化输出
操控器 | 作用 |
---|---|
setiosflags(flags) | 将flags设为格式标志,调用相应stream的setf(flags) |
resetiosflags(mask) | 清除mask所标示的一组标志 |
//程序前需要引入<iomanip>头文件
//输出"1.234"(遵循四舍六入五成双的原则,而不是四舍五入的原则)
cout << setiosflags(ios::fixed) << setprecision(3) << 1.2345 << endl;
//需要用resetiosflags()函数清除前面的输出格式
cout << resetiosflags(ios::fixed);
cout << setiosflags(ios::scientific) << 12345.0 << endl;//输出"1.23e+004"
setprecision(val),显示浮点数小数点后val位,不足补0。所谓“四舍六入五成双”是指当末位为5时,如果前一位是奇数,则进位;如果前一位是偶数,则舍去。关于格式化输出,需要引入<iomanip>头文件,详见这里。
setiosflags的参数是该流的格式标志值,这个值由如下位掩码(ios枚举器)指定,并可用位或(|)运算符进行组合,如
setiosflags(ios::left | ios::dec | ios::showpoint)
参数 | 作用 |
---|---|
ios::skipws | 在输人中跳过空白。 |
ios::left | 左对齐值,用填充字符填充右边。 |
ios::right | 右对齐值;用填充字符填充左边(缺省对齐方式)。 |
ios::internal | 在指定任何引导标记或基之后增加填充字符。 |
ios::dec | 以基10(十进制)格式化数值(缺省进制)。 |
ios::oct | 以基8(八进制)格式化数值。 |
ios::hex | 以基16(十六进制)格式化数值。 |
ios::showbase | 以C++编译器能读的格式显示数值进制。 |
ios::noshowbase | 不显示数值进制。 |
ios::showpoint | 对浮点数值显示小数点和尾部的0。 |
ios::noshowpoint | 不需要输出小数点。 |
ios::uppercase | 对于十六进制数值显示大写字母A到F,对于科学格式显示大写字母E。 |
ios::nouppercase | 强制字母小写。 |
ios::showpos | 对于正数显示正号(+)。 |
ios::noshowpos | 强制省略正数前正号。 |
ios::scientific | 以科学格式显示浮点数值。 |
ios::fixed | 以定点格式显示浮点数值。 |
ios::unitbuf | 导致在每次插入之后ostream::osfx刷新该流。缺省地,cerr是缓冲的单元。 |
ios::stdio | 导致在每次插入之后ostream::osfx刷新该流的stdout和stderr。 |