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


person mshindal    schedule 10.02.2014    source источник
comment
вам нужно установить фамилию и имя, так как они просто нажимают на столбец номера телефона шириной 30   -  person Bob Fincheimer    schedule 10.02.2014


Ответы (2)


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

os << rec.lastname << " " << rec.firstname << setw(30 - rec.lastname.size() - rec.firstname.size()) << rec.phonenum;
person Zac Howland    schedule 10.02.2014
comment
Вы также можете использовать right, чтобы переключить его на выравнивание по правому краю ... но я всегда считал, что это головная боль, когда вы действительно хотите, чтобы все было выровнено по левому краю. - person Zac Howland; 10.02.2014

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

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

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

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

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

Кстати: настройка right установлена ​​по умолчанию.

person Spock77    schedule 10.02.2014