【问题标题】:why is setw not working?为什么 setw 不工作?
【发布时间】:2013-05-18 22:15:59
【问题描述】:
#include<fstream.h>
#include<iomanip.h>
#include<iostream.h>
using namespace std;
ifstream f("atestat.in");
ofstream g("atestat.out");
int n,i,nr=0;
float v[100];
void a(int n)
{
    for(i=1;i<=n;i++)
        f>>v[i];
    for(i=1;i<=n;i++)
    cout<<v[i]<<" ";
}
int main()
{
    f>>n;
    a(n);
    cout<<endl;
    float s=0;
    for(i=1;i<=n;i++)
    {
        if(v[i]<0)
        {   
        s=s+v[i];
        nr++;
        }
    }
    cout<<setw(2)<<s/nr<<endl;
}

我的“atestat.in”文件包含: 6 -56.765 2.3 4.56 -1.2 -1.8 3

程序首先显示“atestat.in”文件第二行的所有数字,通过使用一个数组,然后它应该显示该数组内所有负数的算术平均值,用小数点后两位数的精度。出于某种原因, setw(2) 什么都不做,因为我的 cout&lt;&lt;setw(2)&lt;&lt;s/nr&lt;&lt;endl; 显示“19.9217”而不是“19.92”......谁能告诉我为什么?我是否以某种方式不当使用它?

【问题讨论】:

  • 您查看过std::setw 的任何文档吗?另外,我可以告诉您的编译器确实很旧,因为它接受那些已删除的标头。从它们中删除.h,如果可以的话升级编译器。
  • 是的,我一直在寻找它可能不起作用的原因,并且我已经看到了它的使用示例等等,但是我使用的代码对我来说似乎很好......所以我真的不知道
  • 它是我在项目中必须使用的编译器...我知道它已经很老了,但这是他们让我们使用的,所以就是这样。还有,我放.h没关系,我只是习惯放了。

标签: c++ setw


【解决方案1】:

精度为小数点后两位数

为此,您需要:

std::cout << std::fixed;
std::cout << std::setprecision(2) << f << '\n'; //assume f the number you wanna print

std::setw 不用于此目的:

当在表达式 out > setw(n) 中使用时,将流输出或输入的宽度参数设置为正好 n。

【讨论】:

  • 是的,我知道我可以使用 setprecision,但这意味着我以后要显示的所有内容也将以 2 个数字的精度显示,除非我每次都更改精度...有没有办法围绕这个?
  • @GîdeiCodrin 查看文档中的示例? en.cppreference.com/w/cpp/io/manip/setprecision
  • 很遗憾,我看不到这个例子是如何回答我的问题的……你能解释一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 2016-11-19
  • 1970-01-01
  • 2011-08-19
  • 1970-01-01
  • 2015-06-15
相关资源
最近更新 更多