2014-02-10 31 views
0

我有一個ostream稱爲操作系統,我用這樣的:C++運輸及工務局局長不對齊列

os << rec.lastname << " " << rec.firstname << setw(30) << rec.phonenum; 

,輸出是顯示出來是這樣的:

WITT CANDACE     250-939-5404 
PERKINS THEODORE     723-668-3397 
HULL THAD     708-807-6757 
SALAZAR STEPHAN     415-413-5058 
WILKINS ISRAEL     938-701-1455 
PERRY BRUCE     540-916-2956 
RIVERS VALENTIN     726-204-2377 
JOHNSTON WILFRED     582-126-8861 
SPENCE LEVI     985-365-7415 
NGUYEN KAYLA     484-322-1527 

我知道這已經之前問過很多次,但答案總是使用setw(),這在我的情況下不起作用。任何想法爲什麼?

+2

設置你需要運輸及工務局局長的姓氏與名字,因爲他們只是推在PHONENUMBER列是30寬 –

回答

4

setw將向輸出流添加空格的數量。如果要排隊colums,你需要subract以前刺的大小:

os << rec.lastname << " " << rec.firstname << setw(30 - rec.lastname.size() - rec.firstname.size()) << rec.phonenum; 
+0

工作完美,謝謝。 – mshindal

+0

你也可以用'right'將它切換到右對齊的位置......但是我總是發現,如果你真的想讓事情左對齊,那就很頭疼。 –

0
<< setw(30 - rec.lastname.size() - rec.firstname.size()) 

將會一直工作到的名字和姓氏規模將< 30.然後運輸及工務局局長將收到負值並且將只輸出姓氏之後的文本

您可以評估記錄值的最大長度,增加一些空間,並使用該值比對:

<< setw(start2ndColumnPosition - rec.lastname.size() - rec.firstname.size()); 

但是,如果你在你的數據是確保您能留下30

BTW:right調整默認情況下

相關問題