Загрузка...

How to edit the code to display a flat table?

Thread in C/C++ created by Lend_inactive296716 Feb 13, 2023. (bumped Feb 13, 2023) 249 views

  1. Lend_inactive296716
    Lend_inactive296716 Topic starter Feb 13, 2023 Banned 30 Feb 10, 2018
    написал код для практики, но никак не могу сделать так, чтобы таблица выводилась ровно. Значения под комментарием в самом конце кода. Кто может, помогите, пожалуйста. Может стоило использовать метод getline, ибо в cin ограниченные буферы.
    Code
    #include<stdio.h>
    #include<clocale>
    #include <iostream>
    #include <iomanip>

    using namespace std;

    int main()
    {
    setlocale(LC_ALL, "rus");
    system("chcp 1251 > nul");

    char name1[10]{}, name2[10]{}, name3[10]{};
    char sc1{}, sc2{}, sc3{};
    long long cnt1{}, cnt2{}, cnt3{};
    float sq1{}, sq2{}, sq3{};

    cout << "1.Введите: фирму, количество, объём, часть >";
    cin >> name1 >> sc1 >> cnt1 >> sq1;
    cout << "2.Введите: фирму, количество, объём, часть >";
    cin >> name2 >> sc2 >> cnt2 >> sq2;
    cout << "3.Введите: фирму, количество, объём, часть >";
    cin >> name3 >> sc3 >> cnt3 >> sq3;
    cout << setw(31) << "|------------------------------------------------------------------------|\n";
    cout << setw(31) << "| Фирмы - производители СКБД |\n";
    cout << setw(31) << "|------------------------------------------------------------------------|\n";
    cout << setw(10) << "| Фирма " << setw(5) << "| Количесво. Продуктов " << setw(5) << "| Годовой объём продажи " << setw(5) << "| Часть рынка |\n";
    cout << setw(31) << "|-----------|------------------------|------------------------|--------------|\n";
    cout << setw(10) << "| " << setw(11) << name1 << setw(3) << "| " << setw(15) << sc1 << setw(3) << "| " << setw(16) << cnt1 << setw(3) << "| " << setw(12) << sq1 << setw(3) << "|\n";
    cout << setw(31) << "|-----------|------------------------|------------------------|--------------|\n";
    cout << setw(10) << "| " << setw(11) << name2 << setw(3) << "| " << setw(15) << sc2 << setw(3) << "| " << setw(16) << cnt2 << setw(3) << "| " << setw(12) << sq2 << setw(3) << "|\n";
    cout << setw(31) << "|-----------|------------------------|------------------------|--------------|\n";
    cout << setw(10) << "| " << setw(11) << name3 << setw(3) << "| " << setw(15) << sc3 << setw(3) << "| " << setw(16) << cnt3 << setw(3) << "| " << setw(12) << sq3 << setw(3) << "|\n";
    cout << setw(31) << "|-----------|------------------------|------------------------|--------------|\n";
    cout << setw(31) << "| Примечание: по данным Gartner Group за 1999г |\n";
    cout << setw(31) << "--------------------------------------------------------------------------\n";
    return 0;
    }
    /*
    Oracle 1 2488000000 31.1
    IBM 3 2391500000 29.9
    Microsoft 2 1048000000 13.1

    */
     
  2. Kail_inactive6607873
    Lend_inactive296716, Проблема в том, что если поля размет полей имеет разную длину. Например "Фирма" - 5 символов, а "Годовой объём продажи" 21 с учётом пробелов.
    Метод setw(); у тебя по сути статичный. Ты отрисовываешь таблицу, будто заранее знаешь ещё длину полей.
    Попробуй передавать в метод setw(); значения зависящие от длины строки.
    К примеру у тебя всегда отступ 15 символов. строка БУДЕТ иметь 10. Значит передать нужно setw(15 - std::size(name1));
     
    1. View previous comments (6)
    2. Kail_inactive6607873
      Daemon, настолько нечем заняться в жизни, что доебываешься до слов. Прекрасно понимая о чем я)
    3. Daemon
      Kail_inactive6607873, Вы сами не понимаете, что пишете, если все везде путать, то не выйдет ничего хорошего, тем более вы это пишете в качестве ответа, т.е. выступаете в качестве образца для спрашивающего.
Loading...
Top