cout — C ++ setw не выравнивает столбцы

У меня есть ostream под названием os, который я использую так:

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 (), что в моем случае не работает. Есть идеи почему?

0

Решение

setw добавит количество пробелов в выходной поток. Если вы хотите выстроить столбцы, вам нужно вычесть размер предыдущих строк:

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

Другие решения

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

Будет работать, пока размер имени и фамилии не будет < 30. Тогда setw получит отрицательное значение и выведет текст сразу после фамилии

Вы можете оценить максимальную длину значений записи, добавить несколько пробелов и использовать это значение для выравнивания:

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

Но, если вы уверены в своих данных, вы можете оставить 30.

КСТАТИ: право регулировка установлена ​​по умолчанию

0

По вопросам рекламы [email protected]