C/C++

Сделать вывод результата в таблице. С++.

Вот так должен выглядеть вывод. Можете использовать любые переменные (fio,mark1,mark2,average), я поменяю все в коде. Мне нужна именно такая таблица. Не используйте чат gpt, он пишет неровную таблицу.
В,
Витек ,
80
Я хз, в каком формате в программе лежат данные. Но для вывода таких строк можно использовать сишный printf:
 // шапка
printf("|%11s%9s| 1 | 2 | 3 | 4 | 5 | СР.БАЛЛ |\n", "ФИО", "");
// строка
printf("|%20s|%2d |%2d |%2d |%2d |%2d |%7.2f |\n", fio, m1, m2, m3, m4, m5, ma);
Ну, а линии можно набить вручную или в цикле.
 char horiz_line[52];
for (size_t i = 0; i < 51; i++) horiz_line[i] = '-';
horiz_line[51] = '\0';
И выводить как-то так:
 puts(horiz_line);
printf("%s\n", horiz_line);

В C++'20 есть аналог printf, работающий со стримами, а в более ранних версиях языка - только через сишные вызовы.
Есть, конечно, Путь Страуструпа (всякие там setw, setprecision), но это - для мазохистов, по-моему. Абсолютно не наглядно и громоздко.
ЕН
Евгений Никифоров
87 571
Лучший ответ
 #include  
#include
#include
#include
#include
#include

using namespace std;

struct Student {
Student() = delete;
explicit Student(const size_t count) : count(count) {
exams.resize(count);
}
Student(const vector& exams, const string& name)
: exams(exams), name(name), count(exams.size()) {
}
vector exams;
string name;
double average()const {
return accumulate(exams.begin(), exams.end(), 0.0) / exams.size();
}
private:
size_t count;
friend istream& operator>>(istream& inp, Student& s) {
cout exam;
}
inp.ignore(0x1000, '\n');
return inp;
}
friend ostream& operator
Андрей Мишин
Андрей Мишин
86 637
Бауржан Сагитов
 Output: 

----------------------------------------------------
| ФИО | 1 | 2 | 3 | 4 | 5 | СР.БАЛЛ |
----------------------------------------------------
| Колотин| 2 | 3 | 4 | 5 | 3 | 3.40 |
| Иванов| 3 | 4 | 4 | 4 | 3 | 3.60 |
| Петров| 4 | 4 | 4 | 5 | 5 | 4.40 |
----------------------------------------------------
Основная трудность выравнивания строк, содержащих русский текст, состоит в том, что реальное количество байт в строке не совпадает с количеством символов, отчего возникают всякие перекосы, в том числе в ответе Папы.

Вот мой вариант, всякие чудесные плюсы и минусы в задаваемой ширине как раз обусловлены вышеприведённой проблемой.
 #include  
#include
using namespace std;

const int count_marks = 5;
struct {
string fio;
int marks[count_marks];
float average;
}
persons[] = {
{ "Колотин", { 2, 3, 4, 5, 3 }, 3.4 },
{ "Иванов", { 3, 4, 4, 4, 3 }, 3.6 },
{ "Петров", { 4, 4, 4, 5, 5 }, 4.4 }
};


int main()
{
const int FIO_field_width = 17; // Ширина поля ФИО
const int AS_field_width = 9; // Ширина поля " СР.БАЛЛ " (с учётом пробелов)

cout
Александр Мирошниченко Не скопировалась первая строчка:
 #include