1、wchar_t
区别于char,用于存储unicode字符。而char是单字节,只能存储ascii字符。
2、cin/cout/cerr/clog
cerr无缓冲错误流 clog有缓冲错误流
3、输出cout
(1)要打印一个表示字符串的char *的值(即第一个字符的内存地址),“<<”直接打印不行,因为已经被重载为将char *数据类型作为字符串来打印。 解决方法是将char *强转为void *类型(c++中输出地址,都要这样转)
(2)put函数用于输出字符,可以联级使用,如:cout.put('A').put('\n')
4、输入cin
- eof函数:返回是否已经到流结尾
- get函数:从流输入一个字符并作为返回值返回,在流结尾会返回EOF值。有三个版本:无参数,一个字符数组参数,三个参数。
三参数版本取多个字符放入字符数组中。参数包括一个字符数组,一个数组长度和一个分隔符(默认'\n')。 分隔符不放入字符数组中,但留在输入流中。 - getline函数:与get的三参数版本类似,参数包括一个字符数组和一个数组长度。 不同的是将分隔符从流中提取出来丢弃。
- ignore函数:读取并丢弃一定数量字符(默认一个),遇到指定分割符停止(默认EOF)
- putback函数:将先前使用get函数获取的字符再放回流中。
- peek函数:返回输入流下一字符,但不从流中移除。
(1)c++有类型安全的I/O,如遇到意料之外的数据类型,各种相应的错误位会被设置。
(2)非格式化的I/O函数有read、write和gcount。gcount返回最近一次输入操作读取的字符数。
5、流操作符
(1)整型流基数:十进制dex,八进制oct,十六进制hex,自定义进制setbase。如:cout<<setbase(6)<<132
(2)浮点精度:precision和setprecision。如:
cout.precision(2); cout<<1.675 复制代码
或
cout<<setprecision(2)<<1.675; 复制代码
(3)域宽:width和setw。 不是粘性的,当输出域宽大于指定域宽不截短,完整打印。使用同上。
(4)自定义输出流操作符: 返回类型和参数都必须是ostream&类型。如:
ostream& endLine(ostream& output){ return output<<'\n'<<flash; } 复制代码
使用:cout<<'a'<<endLine<<'b'
6、流的格式状态和流操作符
(1)尾数零和小数点:showpoint
(2)对齐:left、right、internal internal符号左对齐,数字右对齐,如“+ 13”、“0x 13”。
(3)内容填充:fill、setfill
(4)整型流基数:showbase、noshowbase 八进制以0开头如0132,十六进制以0x开头如0x132
(5)科学计数法和定点小数:scientific浮点数以科学计数法格式输出;fixed浮点数以指定小数位数显示。
(6)大小写:uppercase和nouppercase
(7)布尔格式: boolalpha以true和fasle显示;noboolalpha以1和0显示。(c++中bool默认显示1和0)
(8)设置重置格式状态:flag——无参函数返回当前格式(fmtflags类型);单参(fmtflags类型)函数将格式重置会参数的状态
(9)强制输出加号(正号):showpos和noshowpos
7、流的错误状态
错误位 | 获取状态函数 | 设置时机 |
eofbit | eof() | 输入流遇到文件尾 |
failbit | fail() | 流中发生错误(通常可恢复) |
badbit | bad() | 数据丢失错误(不可修复) |
goodbit | good() | 如果上面三个都没设置 |
- rdstate()返回流的错误状态
- clear()将流状态重置为goodbit位
- clear(ios::failbit)为流设置failbit位
注意: 如果badbit或failbit被设置,或都被设置,则basic_ios成员函数operator!返回true,operator void*则返回false。
8、输出流连接到输入流
连接:cin.tie(&cout)
解除连接:inputstream.tie(0)