我知道在C ++中我可以使用setprecision
,如下所示:
streamsize prec = cout.precision();
cout << "Your grade is: " << setprecision(3) << finalGrade << setprecision(prec);
如何将其改编为以下旧样式代码,尤其是在写入文件时?
for ( int k = 0 ; k < vector.size() ; k++ )
{
fprintf( myFile, "%i\t%f\t%f\n", k+1, vector[k].x, vector[k].y );
std::cout << vector[k].x << "\t" << vector[k].y;
}
我特别感到困惑的是setprecision(3)
和setprecision(prec)
出现的顺序,当有多个变量时,就像vector
个元素被写入的情况一样file
...
请有人帮我理解这个吗?
谢谢,
答案 0 :(得分:3)
问题中不清楚您希望setprecision
修改fprintf
的工作方式;从评论中可以清楚地看出来。
这是不可能的(至少在现有的C ++标准库中)。
stdio
和iostreams
系统是独立的,在C ++中大多是独立的部分。此外,iostreams
内容已经 stdio
之后标准化,因此支持setprecision
影响fprintf
意味着更改fprintf
代码,没人想做。
要了解它们之间的区别,请查看ios_base::sync_with_stdio
- 使fpritnf
和operator<<
互操作的专用函数。
要使您的系统正常工作,您可能需要将fprintf
替换为operator<<
。另一种方法是调整fprintf
的格式字符串,但您必须在代码中添加对ios_base::sync_with_stdio
的模糊调用。
答案 1 :(得分:1)
fprintf
中指示小数位数的方法是%.[number]f
;在您的情况下,对于3位小数,代码将是
fprintf( myFile, "%i\t%.3f\t%.3f\n", k+1, vector[k].x, vector[k].y );