2014-02-10 5 views
0

У меня есть ostream называется ОС, которые я использую, как это:C++ setw не выравнивая колонки

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

вам нужно setw на последние и первые имена, поскольку они просто толкая через колонку PHONENUMBER, что 30 шириной –

ответ

4

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

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

Работал отлично, спасибо. – mshindal

+0

Вы также можете использовать 'right', чтобы переключить его на выравнивание вправо ... но я всегда считал, что это головная боль, когда вы действительно хотите, чтобы все было оправдано. –

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

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

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

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

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

BTW: right настройки по умолчанию устанавливается

Смежные вопросы