第17章的一些要点如下:
- cout输入格式:
除了设置计数系统模式,比如hex(十六进制),dec(十进制),oct(八进制)这些是c函数,调用方式为:hex(std::cout);但是ostream重载了<<,所以可以如下:std::cout << hex使用;
另外的常用函数,基本都是cout的成员函数,如下:
a.width(),设置输出宽度,只会影响下一次输出;
b.presicion(),设置精度,比如12.5,设置精度2,则只会显示12;会一直影响后续输出;
c.full(),设置填充字符,使用width()设置输出宽度时,默认使用空白符填充,可以设置要填充的字符;会一直影响后续输出;
d.setf(),设置显示小数点,以true/false显示bool变量,以+/-显示十进制数值正负,以0x等显示十六进制格式等,需要注意:
默认下,对于浮点数,当setf()设置显示小数点后,比如float f = 12;则显示为12.000000;可以通过presicion()设置要显示的精度(实际上这里的精度用于控制显示的小数点数量,默认为6个0);当没有setf()设置显示小数点时,float f = 12;并不能会显示为12.000000;而是显示为12;此时即使设置presicion(12)也不会显示小数点后的0;当没有setf()设置显示小数点后的0时,float f1 = 12.52;此时f本身有小数部分,为0.52;所以通过设置presicion(2);则会显示为12;而不会显示为12.52;如果presicion(6),则不会显示12.520000;因为没有通过setf()显示小数点控制;
可见,在为setf()设置显示小数点时(即未调用setf(std::ios_base::showpoint)时);
presicion()只能影响已有的小数点部分;如f1 = 12.52;
presicion()只能减少显示小数点后的位数(即精度),比如presicion(3);则显示12.5,如果是presicion(2);则显示12;但是如果是presicion(6);不会显示12.5200;
对于f0 = 12;由于本身没有小数部分,所以presicion(3),不会显示12.0;而presicion(1);会显示为le+01(即1,还可以配合设置浮点显示方式为小数方式而不是科学方式来显示精度为1的显示方式);
简而言之,presicion()在没有setf()设置显示小数点的时候,只能用于减少小数点后0的数量,而不能用于增加小数点后0的数量;
- 再谈setf():
setf()可以设置true/false显示bool变量,可以设置小数点后0的显示(配合presicion()),还可以用来设置+/-显示十进制数值正负等等,还可以设置十六进制,八进制前缀显示;但是,对于这些显示,只需要通过一个标识即可;即
fmtflags标识;比如开关fmtflags的第0位为0或1来标识bool变量显示方式,开关第1位为0或1来标识小数点显示等等;
每个选项都可以通过一个位来控制,所有这些选项都使用这个fmtflags变量来控制;
但是,setf()还可以用来设置数值的显示方式,比如计数系统(虽然也可以通过hex(),dec(),oct()函数进行),浮点的显示方式(科学或小数点),对齐方式;
对于数值的显示,setf()无法通过一个fmtflags变量来描述,而需要通过两个fmtflags变量共同控制;
比如首先设置fmtflags1变量为basefield,表示对计数系统进行设置,然后设置fmtflags0变量为ios_base::hex,表示设置计数系统为十六进制;
- cin输入
cin统一以字符读取(即非格式化输入);
cin的<<:cin的<<会将读取解析自动转换为变量类型(即格式化为变量类型的数据);
cin的成员函数:getline()和get(void),get(ch),这三个用于读取字符串,字符,而非数值;区别如下:
cin.getline()用于读取一行中包含空格等空白符的输入,cin>>会跳过读取开始的所有空白符和以任意空白符结束读取;
cin.get(void)返回下一个读取的字符的int编码;
cin.get(ch)将读取下一个字符存入ch,并返回ostream;
cin的peek()函数:用于查看下一个字符,不会跳过任意空白符,不会读取,只会查看(实际上是先get()后putback());
- getline()会读取\n,string或char*不会保存\n,而是保存\0;
ReviewCpp(17)
原文:https://www.cnblogs.com/JhonKkk/p/14719069.html