Автоматическое выравнивание столбцов C++

Я новичок в C++. Я создаю проект, который просит пользователя ввести свое имя, возраст, номер телефона и университет.

Код выглядит так:

#include<iostream>
#include<iomanip>
#include<vector>

using namespace std;

int main(){
vector<string>name;
vector<string>age;
vector<string>hpno;
vector<string>university;

string sname, sage, shpno, suniversity;

cout << "Enter name:" << endl;
getline(cin, sname);
name.push_back(sname);

cout << "Enter age:" << endl;
getline(cin, sage);
age.push_back(sage); 

cout << "Enter phone number:" << endl;
getline(cin, shpno);
hpno.push_back(shpno);

cout << "Enter university:" << endl;
getline(cin, suniversity);
university.push_back(suniversity);

cout << "Name" <<" "<< "Age" <<" "<< "Handphone Number" <<" "<< "University" 
     <<endl;    

for (int j = 0 ; j <= name.size() - 1 ; j++){
cout << name[j] << " " << age[j] << " " << hpno[j] << " " << 
university[j]<<endl;}

}

Допустим, пользовательский ввод выглядит так:

Имя: Джон Сина
Возраст: 20
Номер телефона: 1234568903
Университет: Мультимедийный университет

Вывод, который я хочу, выглядит следующим образом:
Name Age Phone Number University John Cena 20 1234568903 Multimedia University


Но вывод, который я получаю, выглядит так:
Name Age Phone Number University John Cena 20 1234568903 Multimedia University

Как заставить ширину заголовка синхронизироваться с шириной контента?

3 ответа

Я думаю, что вы должны установить ширину. Для этого в C++ есть setw(). использовать это

http://www.c4learn.com/cplusplus/cpp-setw-setting-field-width/

перейдите по этой ссылке

Сначала включите пропавшие <string> заголовок, не полагайтесь на бесплатные поездки от других заголовков. Затем используйте потоковые манипуляторы std::left и std::setw как для заголовка, так и для вывода данных:

std::cout << std::left << std::setw(10) << "Name"
    << std::setw(10) << "Age"
    << std::setw(20) << "Handphone Number"
    << std::setw(10) << "University"
    << std::endl;

for (int j = 0; j <= name.size() - 1; j++){
    cout << std::setw(10) << name[j]
        << std::setw(10) << age[j] 
        << std::setw(20) << hpno[j] 
        << std::setw(10) << university[j] << endl;
}

Примечание: некоторые манипуляторы являются постоянными и должны быть включены только один раз, другие нет и должны быть включены несколько раз. Избегайте using namespace std,

В этом случае вам нужны std::setw(), std::setfill('*'). Перейдите по этой ссылке и прочитайте документацию.

http://www.cplusplus.com/forum/beginner/29761/

http://www.cplusplus.com/reference/ios/right/

C++ может setwill и setfill pad конец строки?

Другие вопросы по тегам