嗨,我在这里得到一个小问题。
我正在做我的C ++作业,样本输出是
% cat this.out
5.00 0.00
1.55 4.76
-4.05 2.94
-4.05 -2.94
1.55 -4.76
但我得到的是
% cat test.out
5 0
1.55 4.76
-4.05 2.94
-4.05 -2.94
1.55 -4.76
我无法弄清楚如何使我的输出格式看起来像那样。
在这种情况下我遇到的另一个问题是,我希望输出中的第一行类似于5.00 0.00
,但即使我设置precision(3)
这是我的代码生成输出,请看一下。
file.open (filename, fstream :: in | fstream :: trunc);
if(!file.is_open())
{
cerr << "Error opening file " << filename << endl;
cout << "Exiting..." << endl;
exit(0);
}
for(i = 0 ; i < num; i ++)
{
angle = 2 * M_PI * i/num;
x = rad * cos(angle);
y = rad * sin(angle);
file.precision(3);
// x, y are double
file << "\t" << x << "\t" << y << endl;
}
cout << "finished";
file.close();
答案 0 :(得分:3)
您需要在标准库标题Input/output manipulators中查找<iomanip>
。
这些内联使用,如:
std::cout << "\t" << std::fixed << std::setprecision(z) << x
你最感兴趣的是:
答案 1 :(得分:2)
像往常一样,您需要为特定语义定义操纵器。 为了快速工作,我经常会使用以下内容:
class FFmt
{
int myWidth;
int myPrecision:
public:
FFmt( int width, int precision )
: myWidth( width )
, myPrecision( precision )
{
}
friend std::ostream&
operator<<( std::ostream& dest, FFmt const& format )
{
dest.setf( std::ios_base::fixed, std::ios_base::floatfield );
dest.precision( myPrecision );
dest.width( myWidth );
return dest;
}
};
(在我自己的代码中,我从保存格式的基类派生这些 state,并在完整表达式结束时恢复它。)
这是相当通用的。在实践中,您将使用名称创建多个
例如coord
和angle
,用于指定您在逻辑上输出的内容。
但是,你明白了。有了这个,你就可以写下这样的东西:
std::cout << FFmt( 6, 2 ) << x << '\t' << FFmt( 6, 2 ) << y << std::endl;
答案 2 :(得分:1)
这应该可以解决问题:
file.precision(2);
file << fixed << "\t" << x << "\t" << y << endl;