我知道在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, "%it%ft%fn", k+1, vector[k].x, vector[k].y );
std::cout << vector[k].x << "t" << vector[k].y;
}
我特别感到困惑的是,当有多个变量时,setprecision(3)
和setprecision(prec)
出现的顺序,例如将vector
元素写入file
......
有人可以帮我理解这一点吗?
谢谢
从这个问题中不清楚您希望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
。
指示fprintf
中小数位数的方法%.[number]f
; 在您的情况下,对于 3 位小数,代码将是
fprintf( myFile, "%it%.3ft%.3fn", k+1, vector[k].x, vector[k].y );