【问题标题】:what's the range of the formatted output of `cout``cout` 的格式化输出范围是多少
【发布时间】:2016-01-16 06:54:33
【问题描述】:

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

right format

这是我的尝试(所有输出都是最后四行): case 1 - 5

  1. 无格式输出;在图片中我们可以看到应该打印的数字
  2. 第 1 行无格式,第 2 行有格式 第 1 行的数字;只有第一个是对的,大于100的数字是科学计数法
  3. 两行都有格式 就像情况2一样,<<setw(3)<<setfill('0')好像只能用一次把43改成043,然后就不行了
  4. 添加了noshowpoint。如果我打印*(p + 2)alone,它总是打印118带或不带格式。但是如果我在for 循环中打印*(p + 2),则输出仍然是1.2e+002,除了第一个。但是如果我直接打印数字118,输出是对的。

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

【问题讨论】:

    标签: c++


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      好吧,对于第三个,您设置了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 操纵器设置为流,而不是单个输出。

      【讨论】:

      • 我添加了noshowpoint,但还是有问题。在案例 4 中显示。非常感谢。
      • 按照我的示例,尝试仅为第三种情况添加 noshowpoint。您将 118 添加到输出中,并且 setw 在其上过期。
      • 是的,我试过这个but it doesn't work, the last one
      • 我能够重现它,你的第一个参数是双倍的,通过在第二个输出中设置 setprecision(2) 你可以改变它的打印方式。查看更新的代码。
      • 是的,没错。 setprecision 引起了问题,而不是 showpoint。非常感谢:)
      猜你喜欢
      • 1970-01-01
      • 2016-06-10
      • 2011-04-29
      • 2017-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 1970-01-01
      相关资源
      最近更新 更多