Как отредактировать код, чтобы выводилась ровная таблица?

Рейтинг: -1Ответов: 1Опубликовано: 14.02.2023

написал код для практики, с++, но никак не могу сделать так, чтобы таблица выводилась ровно. Значения под комментарием в самом конце кода. Кто может, помогите, пожалуйста. Может стоило использовать метод getline, ибо в cin ограниченные буферы.

#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
 
*/

Ответы

▲ 1Принят

Например, так:

cin >> name3 >> sc3 >> cnt3 >> sq3;
cout << "|---------------------------------------------------------------------------|\n";
cout << "|                      Фирмы - производители СКБД                           |\n";
cout << "|---------------------------------------------------------------------------|\n";
cout << "| Фирма     | Количество. Продуктов  | Годовой объём продаж   | Часть рынка |\n";
cout << "|-----------|------------------------|------------------------|-------------|\n";
cout << "| " << setw(9) << name1 << " | " << setw(15) << sc1 << "        | " << setw(16) << cnt1;
cout << "       | " << setw(8) << sq1 << "    |\n";
cout << "|-----------|------------------------|------------------------|-------------|\n";
cout << "| " << setw(9) << name2 << " | " << setw(15) << sc2 << "        | " << setw(16) << cnt2;
cout << "       | " << setw(8) << sq2 << "    |\n";
cout << "|-----------|------------------------|------------------------|-------------|\n";
cout << "| " << setw(9) << name3 << " | " << setw(15) << sc3 << "        | " << setw(16) << cnt3;
cout << "       | " << setw(8) << sq3 << "    |\n";
cout << "|-----------|------------------------|------------------------|-------------|\n";
cout << "| Примечание: по данным Gartner Group за 1999г                              |\n";
cout << "----------------------------------------------------------------------------|\n";
return 0;

Но почему бы вам не выводить данные в цикле, чтоб написать один раз и не мучиться?...