Попытка в 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 шт):

Автор решения: Harry

У вас их больше.

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; });

Вот после этого с синтаксисом все утрясается, но будет ли ваша программа работать? вряд ли, сортировку вы вообще нигде не вызываете... но это уже второй вопрос.

А вообще по вопросам судя - ну почитайте что-то типа "С++ для чайников", вопросы же показывают, что азы не освоены...

→ Ссылка