Автоматическое выравнивание столбцов 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/