У меня есть 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 (), что в моем случае не работает. Есть идеи почему?
setw
добавит количество пробелов в выходной поток. Если вы хотите выстроить столбцы, вам нужно вычесть размер предыдущих строк:
os << rec.lastname << " " << rec.firstname << setw(30 - rec.lastname.size() - rec.firstname.size()) << rec.phonenum;
<< setw( 30 - rec.lastname.size() - rec.firstname.size() )
Будет работать, пока размер имени и фамилии не будет < 30. Тогда setw получит отрицательное значение и выведет текст сразу после фамилии
Вы можете оценить максимальную длину значений записи, добавить несколько пробелов и использовать это значение для выравнивания:
<< setw( start2ndColumnPosition - rec.lastname.size() - rec.firstname.size() );
Но, если вы уверены в своих данных, вы можете оставить 30.
КСТАТИ: право регулировка установлена по умолчанию