代码cout.setf(ios_base::fixed, ios_base::floatfield)怎么解释?
C++中通过cout来实现格式输出,就类似于C语言中通过printf()来实现格式输出。cout.setf()的作用是通过设置格式标志来控制输出形式,其中ios_base::fixed表示:用正常的记数方法显示浮点数(与科学计数法相对应);ios_base::floatfield表示小数点后保留6位小数。
该问题中调用的是setf()函数的第二个原型,setf()函数有两个原型,分别是:
fmtflags setf(fmtflage) //第一原型 fmtflags setf(fmtflags, fmtflags) //第二原型 //fmtflags 是 bitmask 类型(一种用来存储各个位值的类型)的 typedef 名 //显而易见,两个原型的主要区别在于参数数量不同
下面详细介绍 setf() 的两个原型的使用:
setf()的第一原型:
C++为标准输入和输出定义了一些格式标志, 它可以通过flags(), setf(), 和 unsetf() 三个函数来控制.
例如:
cout.setf(ios_base::left); //对所有cout的输出进行左对齐调整.
还有一些常见的标志:
举例演示:
// 形式一: // cout << showpos << 255 << endl; // 形式二: // showpos(cout); // cout << 255 << endl; // 形式三: cout.setf(ios_base::showpos); cout << 255 << endl; //输出: +255
// 形式一: // cout << scientific << 255.255 << endl; // 形式二: // scientific(cout); // cout << 255.255 << endl; // 形式三: cout.setf(ios_base::scientific); cout << 255.255 << endl; //输出: 2.55255e+02
也可以通过使用下面的操作符,不直接操作标志。
例如:当我们设置dec标志时, 我们可以使用下面的命令:
cout << dec; //设置dec表示
设置endl标志时,可以使用下面命令:
cout << endl; //输出换行标示,并清空缓冲区
iostream中定义的操作符
iomanip中定义的操作符
举例演示:
cout << setiosflags(ios_base::scientific) << 255.255 << endl; //输出: 2.55255e+02
cout << setiosflags(ios_base::scientific); //启用scientific标志 cout << resetiosflags(ios_base::scientific); //关闭scientific标志 cout << setprecision(4) << 255.255 << endl; //设置输出数值的精度为4位 //输出: 255.3
setf()的第二原型:
第二原型包含两个参数,第一个参数和第一原型里的参数一样,第二个参数指出要清除第一参数中的哪些位,也就是说,在第二原型中,第一个参数指出要设置哪些位,第二个参数指出要清除哪些位。
虽然听起来很麻烦,但实际上用起来却很简单,只需按自己的实际需求在下表中找到对应的参数套上去就可以了。
setf(long, long) 的参数