Как правильно использовать setw () для форматирования вывода? - PullRequest
0 голосов
/ 02 марта 2020

Я пытаюсь отформатировать свой вывод как:

1 [tab] First Name: John [tab] Last Name: Smith [tab] Age: 20 [tab]daysInCourse: {35, 40, 55} Degree Program: Security

Мой текущий код:

{
    cout << left << setw(15) << studentID;
    cout << left << setw(15) << "First Name: " << FN;
    cout << left << setw(15) << "Last Name: " << LN;
    cout << left << setw(15) << "Email " << studentEmail;
    cout << left << setw(15) << "Age: " << age;
    cout << left << setw(15) << "{" << days[0] << ", " << days[1] << ", " << days[2];
    cout << left << setw(15) << "Degree Program: ";
}

Я поиграл со значением setw каждой строки и не могу понять это правильно. Нужно ли использовать функцию setw только с указанными c значениями?

1 Ответ

1 голос
/ 04 марта 2020

Примечание: Я обеспокоен тем, что опубликованные вами данные содержат фактические адреса электронной почты и информацию о реальных людях, которые могут быть или не быть конфиденциальными и защищенными. Если это так, я думаю, что это нарушение конфиденциальности, что является незаконным. Даже с согласия нет необходимости размещать личные данные на этом форуме; Я бы посоветовал вам удалить эти данные из вашего поста и больше не делать этого в будущем.

Как уже упоминалось в комментариях, манипулятор setw применяется только к следующей строке, поэтому

cout << left << setw(15) << "{" << days[0] << ", " << days[1] << ", " << days[2];

установит ширину 15 только для символа { (аналогично в строке с "First Name: ", et c.). Стоит также отметить, что если строка превышает указанную ширину, она будет содержать следующее содержимое и нарушит выравнивание ваших столбцов; поэтому вам нужно установить ширину, думая о максимально возможном содержании.

Вот рабочий пример для реализации того, что вы хотите, используя stringstream для формирования строки до ее печати ( setw

*1021* выводит:

First Name: Robert       Last Name: Smith                   Email: example@foo.com                            Age: 19   {20, 40, 33}        Degree Program: SOFTWARE      
First Name: Alice        Last Name: Smith                   Email: example@bar.net                            Age: 22   {50, 58, 40}        Degree Program: SECURITY 

Обратите внимание, что я установил разные ширины для каждого поля в зависимости от ожидаемой длины содержания. Например, адреса электронной почты могут быть довольно длинными, но возраст редко превышает две цифры.

...