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。