@KaRToSHKa_Ex

Как оформить список C++?

Есть файл в котором хранится таблица со структурой.
struct MyStruct
    {
        char nameF[10];
        char country[20];
        char city[20];
        char hotel[20];
        double rate_hotel;
        double price_hotel;
        double price_travel;
    };


При выводе могу оформить это с помощью
printf("|%10s||%10s||%10s||               %3.0f||          %7.0f||      %7.0f|\n", p[i].country, p[i].city, p[i].hotel, p[i].rate_hotel, p[i].price_hotel, p[i].price_travel);


Но как можно сделать это в векторе при вводе данных с консоли. Не очень понимаю этот момент и даже не знаю как это гуглить.
cout << "Страна: \n";
    cin >> p.country;
    cout << "Город: ";
    cin >> p.city;
    cout << "Отель: ";
    cin >> p.hotel;
    cout << "Класс отеля: ";
    cin >> p.rate_hotel;
    cout << "Цена за один день проживания: ";
    cin >> p.price_hotel;
    cout << "Цена поездки в обе стороны: ";
    cin >> p.price_travel;
    
    line = p.country;
    line += "||";
    line += p.city;
    
    
    line += "||";
    line += p.hotel;
    line += "||";
    line += p.price_hotel;
    line += "||";
    line += p.price_travel;
    lines.push_back(line); // добавляем в "массив"


Этот код выводит просто друг за другом(пример: Россия||Москва). А из-за того что названия стран и городов могут быть разные по длине, но таблица получается с неровными краями.
  • Вопрос задан
  • 118 просмотров
Пригласить эксперта
Ответы на вопрос 2
vt4a2h
@vt4a2h Куратор тега C++
Senior software engineer (C++/Qt/boost)
Тут есть несколько фундаментальных ошибок.

С++ -- это не C.
Не стоить пользоваться массивами в стиле char nameF[10]. Для этого есть std::string. Для других типов можно использоватьstd::vector или std::array.
То же самое и касательно printf/scanf. В C++ боле каноничным будет использование std::cout, std::cin.

Не нужно записывать строковое представление в массив.
Храните массив структур. При необходимости, распечатывайте в цикле.

Пользуйтесь манипуляторами.
В C++ можно подключить заголовочный файл iomanip. В нём есть манипулятор setw. Его использование поможет вам сделать таблицу с ровными краями. Есть ещё, например setprecision, если необходимо регулировать точность выводимых значений.

PS
Документацию по всему описанному выше можно найти на cppreference.com
Ответ написан
Комментировать
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Используйте snprintf. Так можно с тем же форматом вывести все данные не в консоль, а в строку.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы