"cout"的格式化输出范围是多少

what's the range of the formatted output of `cout`

本文关键字:范围是 多少 输出 格式化 cout      更新时间:2023-10-16

在我的程序中,将有两行输出:第一行的数字是小于1000的整数;第二行中的数字是0到10之间的浮点数。我想要的输出格式是:

正确的格式

,下面是我的尝试(所有输出都是最后四行):案例1 - 5

  1. 无格式输出;在图片中我们可以看到应该打印的数字
  2. 第一行不带format,第二行带format第1行中的数字;只有第一个数字是正确的,大于100的数字用科学记数法
  3. 两行都带有format就像情况2一样,<<setw(3)<<setfill('0')似乎只工作一次将43更改为043,然后它将不再工作
  4. noshowpoint。如果我单独打印*(p + 2),它总是打印118有或没有格式。但是如果我在for循环中打印*(p + 2),输出仍然是1.2e+002,除了第一个。但是如果我直接打印数字118,输出是正确的。

那么,我的代码哪一部分是错的呢?以正确的格式输出答案的正确方法是什么?

事实上,并非所有IO格式化操纵符都是持久的。其中一些,如std::setw,只在下一次操作时生效,然后过期。你的代码没有任何"错误";你只需要再次使用机械手。参考您喜欢的c++标准库文档来检查您使用的每个操纵符的持久性。

那么,对于第三个,您设置了showpoint,但从未使用noshowpoint取消它,因此下一行问题。

#include <iostream>
#include <iomanip>
using namespace std;
int main() {
    double x[4]= {43.0,118.0,9.0,5.0};
    double y[4] = {9.5, 9.0, 8.5, 8.0};
    // your code goes here
    for (int i=0; i< 4; i++)
    {
      cout<<noshowpoint<<setprecision(3)<<setw(3)<<setfill('0')<<(x[i]) <<" ";
      cout<<showpoint<<setprecision(2)<<y[i] << endl;
    }
    return 0;
}

给出期望的输出。

请注意,您为流设置了showpointsetprecision操纵符,而不是为单个输出设置的。