设置精度应用于旧的 C 样式代码



我知道在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++标准库)。

stdioiostreams系统是独立的,大部分是独立的C++部分。此外,iostreams的东西在stdio的东西之后是标准化的,所以支持让setprecision影响fprintf意味着改变fprintf代码,这是没有人愿意做的。

要了解它们之间的分离程度,请查看ios_base::sync_with_stdio - 一种使fpritnfoperator<<互操作的专用功能。

为了使您的系统正常工作,您可能需要将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 );

相关内容

  • 没有找到相关文章

最新更新