0

我有一个名为 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(),这在我的情况下不起作用。任何想法为什么?

4

2 回答 2

4

setw会将空格数添加到输出流中。如果要排列列,则需要减去先前刺的大小:

os << rec.lastname << " " << rec.firstname << setw(30 - rec.lastname.size() - rec.firstname.size()) << rec.phonenum;
于 2014-02-10T01:18:44.037 回答
0
<< setw( 30 - rec.lastname.size() - rec.firstname.size() )

将一直工作到 firstname 和 lastname 的大小小于 30。然后 setw 将收到负值并在 lastname 之后输出文本

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

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

但是,如果您确定您的数据可以保留 30。

BTW:默认设置右调整

于 2014-02-10T01:41:07.487 回答