2014-03-26 76 views
1

我正在格式化,我沒有得到正確的格式。格式化C++ setw

這裏是我的代碼,這裏是我所得到的輸出

cout << fixed << setprecision(2) << setw(3) << right << source << setw(20) 
       <<right <<vec[source].cityname 
       << setw(15) << left<< sink << setw(15) << left <<vec[sink].cityname 
       << setw(10) << left << vdist[ij] << "miles\n"; 

我得到這個:

30  Novosibirsk_RU13    Tokyo_JP  10497.68 miles 

而且我想收到此:

30 Novosibirsk_RU  13 Tokyo_JP    10497.67 miles 

如何獲得名稱和號碼之間的空間?

我一直在這一段時間,但我不能得到正確的格式

回答

1

您已經在cout聲明中錯誤地使用了std::right IO操縱。爲了實現輸出如圖所示的樣品中你想vec[source].citynamevec[sink].cityname明顯左對齊:

cout << fixed << setprecision(2) << setw(3) << right << source << 
       setw(20) << left <<vec[source].cityname << 
          // ^^^^ 
       setw(3) << left<< sink << 
        //^
       setw(15) << left <<vec[sink].cityname << 
       setw(10) << left << vdist[ij] << "miles\n"; 

另外請注意,如果您使用setw(n)n比下一個字段的長度小(string)變量,它贏得不會被截斷,但會將整個輸出轉移到附加字符數量的右側。