【问题标题】:C++ setw not aligning columnsC ++ setw未对齐列
【发布时间】:2014-02-10 01:15:01
【问题描述】:

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

【问题讨论】:

  • 您需要设置姓氏和名字,因为它们只是将 30 宽的电话号码列推过

标签: c++ cout ostream setw


【解决方案1】:

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

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

【讨论】:

  • 您也可以使用right 将其切换为右对齐...但是当您真的希望事情左对齐时,我总是觉得这很头疼。
【解决方案2】:
<< setw( 30 - rec.lastname.size() - rec.firstname.size() )

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

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

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

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

顺便说一句:right 调整是默认设置的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-09
    • 2022-08-15
    • 1970-01-01
    • 2021-03-26
    • 1970-01-01
    • 2012-10-14
    相关资源
    最近更新 更多