C ++ setw没有对齐列

时间:2014-02-10 01:15:02

标签: c++ cout ostream setw

我有一个名为os的ostream,我用这个:

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 个答案:

答案 0 :(得分:4)

setw会在输出流中添加空格数。如果你想排列colums,你需要减去先前stings的大小:

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

答案 1 :(得分:0)

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

直到firstname和lastname的大小为&lt; 30.然后setw将收到负值,并将在姓氏

之后输出文本

您可以评估记录值的最大长度,添加一些空格并使用此值进行对齐:

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

但是,如果您确定在数据中可以离开30。

BTW:默认设置right调整