Попытка в C++ отсортировать анкетные данные студентов, фамилии которых начинаются на букву А
Всем привет! Дали мне задание по учёбе. Пытался использовать sort, чтобы отсортировать студентов по дню рождения. После этого программа выводит ошибку, которая будет ниже. Что может быть не так в данном коде?
Текст задания:
Составить список, содержащий сведения об N студентах. Для каждого учащегося указать фамилию, дату рождения, оценки сессии по трем предметам. Информацию о каждом студенте оформить в виде структуры. Совокупность структур объединить в массив. Информацию о студентах хранить в файле.
Составить программу, которая обеспечивает ввод исходных данных, сортировку, обработку и вывод на экран информации в соответствии с требованиями:
Отсортировать студентов по дню рождения. Вывести на экран анкетные данные студентов, фамилии которых начинаются с буквы А и их оценки. N = 6.
Мой код:
#include <iostream>
using namespace std;
struct List
{
int number;
string surname;
string date_of_birth;
int marks[3];
};
void vvod (List &, int);
void sort_by_date_of_birth (List &);
void poisk (List &);
int main()
{
setlocale(LC_ALL, "Russian");
int N = 6;
List anketa[N]; int i;
for (i = 0; i < N; i++)
vvod(anketa[i], i + 1);
for (i = 0; i < N; i++)
poisk(anketa[i]);
return 0;
}
void vvod (List &strc, int a)
{
strc.number = a;
cout << "Номер - " << strc.number << endl;
cout << "Ввести фамилию - ";
cin >> strc.surname;
cout << "Ввести дату рождения - ";
cin >> strc.date_of_birth;
int i = 0;
cout << "Ввести оценки сессии по трём предметам - ";
while(i < 3)
{
cin >> strc.marks[i];
i++;
}
cout << endl;
}
// Попытка отсортировать студентов по дню рождения
void sort_by_date_of_birth (List &strc)
{
sort(strc.date_of_birth, N); // 55 27 [Error] 'N' was not declared in this scope
sort(strc.date_of_birth, N); // 55 28 [Error] 'sort' was not declared in this scope
}
// Вывод анкетных данных студентов, фамилии которых начинаются на букву A
void poisk (List &strc)
{
if (strc.surname[0] == 'A')
{
cout << "Номер студента - " << strc.number << endl;
cout << "Фамилия - " << strc.surname << endl;
cout << "Дата рождения - " << strc.date_of_birth << endl;
cout << "Оценки сессии по трём предметам: ";
for (int i = 0; i < sizeof(strc.marks) / sizeof(int); i++)
cout << strc.marks[i] << " ";
}
}
После запуска программа выводит ошибку:
// Line Col Message
// In function 'void sort_by_date_of_birth(List&)':
// 55 27 [Error] 'N' was not declared in this scope
// 55 28 [Error] 'sort' was not declared in this scope
Ответы (1 шт):
У вас их больше.
int N = 6;
List anketa[N]; int i;
Надо const int N = 6;
Чтобы убрать вторую ошибку - вынесите это const int N = 6; перед int main(), сделав объявление глобальным, т.е. видимым во всех функциях.
Чтобы было видно sort, надо добавить в начале файла еще один заголовок
#include <algorithm>
И вот теперь у вас начнутся настоящие проблемы... Потому что настоящая функция sort так не работает. Да и
void sort_by_date_of_birth (List &);
Вы же не одного студента меж собой сортировать хотите, а список - т.е.
void sort_by_date_of_birth (List *);
передавая ей anketa. Ну, а внутри sort вызывать надо примерно так:
void sort_by_date_of_birth (List *strc)
{
sort(strc,
strc + N,
[](const List& a, const List& b) { return a.date_of_birth < b.date_of_birth; });
Вот после этого с синтаксисом все утрясается, но будет ли ваша программа работать? вряд ли, сортировку вы вообще нигде не вызываете... но это уже второй вопрос.
А вообще по вопросам судя - ну почитайте что-то типа "С++ для чайников", вопросы же показывают, что азы не освоены...