2015-10-17 25 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++標準庫文檔來檢查您使用的每個操縱器的持久性。