C++ 输入输出进阶技巧
作者:
捡到一束光
,
2019-05-24 12:44:30
,
所有人可见
,
阅读 2387
#include <iostream>
#include <iomanip>
using namespace std;
int main( void )
{
// left right fixed scientific setprecision setfill 具有后效性
// setw(10) 不具有后效性
// fixed和setprecision的作用还在。只要你设置了,会一直在(除非你把fixed清除,setprecision()修改)
double value;
scanf("(%lf)", &value);
cout << value << endl; // 默认以6精度,所以输出为 12.3457
// 可以这样认为,默认省去了setprecision(6)这句代码
cout << setprecision(4) << value << endl; // 改成4精度,所以输出为12.35
cout << setprecision(8) << value << endl; // 改成8精度,所以输出为12.345679
cout << "-------" << endl;
cout << fixed << setprecision(4) << value << endl;
// 加了fixed意味着是固定点方式显示,所以这里精度指的是小数位,输出为12.3457
cout << value << endl;
// fixed和setprecision的作用还在,依然显示12.3457
cout.unsetf( ios::fixed );
// 去掉了fixed,所以精度恢复成整个数值的有效位数,显示为12.35 setprecision(4)的作用仍存在
cout << value << endl;
// 恢复成原来的样子,输出为12.3457
cout << "-------" << endl;
cout << setprecision(6) << value << endl;
cout << scientific << value << endl; // scientific与 fixed 类似 一个是科学计数,一个是小数形式
cout.unsetf( ios::scientific);
cout << value << endl;
cout << "-------" << endl;
// setfill必须写在开头
cout << setfill('*')<< right << setw(10) << value << endl;
cout << setfill('#')<< setw(10) << value << endl;
// setw(10) 不具有后效性 所以需要在每个valve前加上
cout << setfill('*')<< left << value << endl;
cout << setfill('#')<< setw(10) << value << endl;
/* 机试常遇到的一个坑点
3
you are
he is
she is
对于上面这种输出格式,先cin >> n; 然后若要用getline获取整句话
必须先getchar(); 把换行符吸收掉
*/
// 输出结果如下
12.3457
12.35
12.345679
-------
12.3457
12.3457
12.35
-------
12.3457
1.234568e+01
12.3457
-------
***12.3457
###12.3457
12.3457
12.3457###