本文仅为记录在杭电ACM上使用C++做题过程中值得记录的技术使用细节。欢迎阅读和交流~~
1、两个技术点:A、C++中如何判断输入结束;B、如何在任何值的情况下保留两位小数输出(如5 --> 5.00)。
程序如下,实现了输入实数,输出绝对值的功能,且输出时保留两位小数。
注意#include <iomanip>
double var;
while(cin>>var)
{
if(var<0)
{
var=-var;
}
cout<<fixed<<setprecision(2)<<(double)var<<endl;
}
注意C++中循环输入数据要使用while(cin>>var) === C语言中的while((scanf(***))!=EOF),因为C++中cin是个对象,不是返回>>输入操作符返回流对象的引用,cin >> x 返回istream&,而cout << x返回oostream&。if可直接判断流,如if (cin);while间接判断,如while (cin >> x),若流被标记错误(读取失败)就返回false,所以可以用while循环,ctrl+z,F6可跳出循环,这代表eof(文件结束符)。
关于B,那么就是最后一句代码了。setprecision(n)首先需要include头文件iomanip,范例如下:
cout << setprecision(4)<< 3.1415926 << endl;//输出的结果是3.142
cout<<setprecision(3)<<12345.0<<endl;//输出的结果是 "1.23e+004 "
cout<<fixed<<setprecision(2)<<123.456<<endl;//输出的结果是123.46
可见,fixed与setprecision一起使用才能实现保留几位小数的功能(貌似setprecision(n)仅仅是保留几位有效数字的功能,因为它是算上整数部分的位数的,如果整数部分已经达到了或者超过了参数n,那么就会把小数点左移以实现保留n位数的目标)。