2015-10-17 62 views
1

在我的程序中,会有两行输出:第一行的数字是小于1000的整数;在第二行数字是0和10之间浮动我想输出的格式是这样的:'cout`格式化输出的范围是什么?

right format

,这里是我如何努力(所有输出的最后四行): case 1 - 5

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

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

回答

1

那么,第三,你设置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操纵器,而不是单个输出。

+0

我加了'noshowpoint'但仍然有问题。它显示在案例4中。非常感谢你。 –

+0

尝试添加noshowpoint只为第三种情况,根据我的例子。您将输出118添加到输出并setw过期。 –

+0

是的,我试过这个[但它不起作用,最后一个] –

2

事实上,并非所有的IO格式化机器人都是持久。其中一些,如std::setw只对下一个操作生效,则它们到期。你的代码没有什么“错误”;你只需要再次使用机械手。参考您最喜欢的C++标准库文档来检查您使用的每个操纵器的持久性。