2017-09-18 40 views
3

藉此最小工作示例如何在一個setw中包含>>兩個調用?

#include <iostream> 
#include <iomanip> 
using namespace std; 
int main() 
{ 

    cout << setw(10) << "aaaaaaa" 
      << setw(10) << "bbbb" 
      << setw(10) << "ccc" 
      << setw(10) << "ddd" 
      << setw(10) << endl; 

    for(int i(0); i < 5; ++i){ 

     char ch = ' '; 
     if (i == 0) 
      ch = '%'; 
     cout << setw(10) << i 
      << setw(10) << i << ch 
      << setw(10) << i 
      << setw(10) << i 
      << setw(10) << endl; 
    } 
    return 0; 
} 

輸出是

aaaaaaa  bbbb  ccc  ddd 
     0   0%   0   0 
     1   1   1   1 
     2   2   2   2 
     3   3   3   3 
     4   4   4   4 

我想這樣做的是包括<< i << chsetw(10)一個字段,以便列正確對齊。

+0

您是否閱讀過[setw](http://en.cppreference.com/w/cpp/io/manip/setw)的文檔? –

+0

@BasileStarynkevitch,所以這裏唯一的解決方案是連接成一個字符串? – CroCo

回答

2

可能在一個串結合ichsetw不會接受這種行爲本身

試試這個片斷

cout << setw(10) << i 
     << setw(10) << std::to_string(i) + ch; 
+0

如果有必要,我想避免這種方法。 – CroCo

+2

@CroCo你爲什麼避免這種行爲? –

+0

@CroCo所以你想避免這種做法,但接受它。爲什麼? – Yunnosch

2

你需要將它們連接成一個字符串,像這樣:

#include <string> 
cout << setw(10) << std::to_string(i) + ch; 

一般。

但是,如果你知道i是一個字符,你可以使用:

cout << setw(9) << i << ch; 

這可能會爲你的情況下,由於i似乎' ''%'

+0

這是這個問題的唯一解決方案嗎? – CroCo

+0

檢查我的更新@CroCo – gsamaras

1

我不確定要了解您的需求。

您可以使用一些std::ostringstream

std::ostringstream os; 
os << i << ch << std::flush; 
std::cout << setw(10) << os.str(); 

你可以建立一個字符串,如James Maa answered

5

因爲我們正在尋找在任' ''%',你可以簡單地計算靜態。

cout << setw(10) << i 
    << setw(9) << i << ch 
    << setw(10) << i 
    << setw(10) << i 
    << setw(10) << endl; 
+0

非常簡單,非常優雅。 – Chiel

相關問題