C/C++

Программирование c++ программирование и работа со структурами

Составить список студентов включающий номер зачетной книжки факультет группу 5 оценок. Удалить из списка фамилии студентов, имеющих хотя бы одну двойку
#include <iostream>
#include <string>
#include <list>
#include <array>
using namespace std;
unsigned integer(const char* msg, istream& inp = cin) {
cout << msg;
unsigned value;
inp >> value;
inp.ignore(inp.rdbuf()->in_avail());
return value;
}
struct Student {
unsigned number;
string name;
string faculty;
array<short, 5> marks;
bool good()const {
for (auto mark : marks) if (mark < 3) return false;
return true;
}
friend istream& operator>>(istream& inp, Student& s) {
cout << "Ф. И. О.: ";
getline(inp, s.name);
s.number = integer("Номер зачётной книжки: ");
cout << "Факультет: ";
getline(inp, s.faculty);
cout << "5 оценок: ";
for (auto& mark : s.marks) inp >> mark;
inp.ignore(inp.rdbuf()->in_avail());
return inp;
}
friend ostream& operator<<(ostream& out, const Student& s) {
out << s.name << ' ' << s.number << ' ' << s.faculty
<< "\n - оценки:";
for (auto& mark : s.marks) out << ' ' << mark;
return out;
}
};
int main() {
system("chcp 1251 > nul");
auto n = integer("Количество студентов в группе: ");
list<Student> group;
for (auto i = 0U; i < n; ++i) {
Student s;
cin >> s;
group.push_back(s);
}
system("cls");
for (auto& student : group) cout << student << '\n';
puts("");
auto bad = [](Student& x) { return! x.good(); };
group.erase(remove_if(group.begin(), group.end(), bad), group.end());
for (auto& student : group) cout << student << '\n';
puts("");
system("pause > nul");
}
Mikhail Tkachev
Mikhail Tkachev
97 061
Лучший ответ