@Ben_r007

Односвязный линейный список студентов. Как исправить ошибку?

Здравствуйте.
Нужно создать программу, в которой будет создаваться односвязный линейный список студентов. И нужно сделать возможность изменения имени заданного студента.
При компиляции, выходят ошибки:
Серьезность Код Описание Проект Файл Строка Состояние подавления
Ошибка (активно) E0137 выражение должно быть допустимым для изменения левосторонним значением Student Work C:\Users\John\source\repos\Student Work\Student Work\main.c 87
Ошибка (активно) E1072 объявлению не может быть назначена метка Student Work C:\Users\John\source\repos\Student Work\Student Work\main.c 111
Ошибка C2106 =: левый операнд должен быть левосторонним значением Student Work C:\Users\John\source\repos\Student Work\Student Work\main.c 87

Как можно исправить эти ошибки?
И дополнительно, посоветуйте, как я могу улучшить мой код? Может, что-то можно написать проще, лучше или эффективнее?
Код main.c:
#include <stdio.h>
#include <string.h>
#include <windows.h>
#define MAX 3
#define KOL 15

struct Student
{
    int id;
    char Name[KOL];
    int Age;
    float AverageRaiting;
    struct Student* nextStudent;
};

void InitStudentList(struct Student** student)
{
    *student = (struct Student*)
        malloc(sizeof(struct Student));
    (*student)->id = 1;
    printf("Введіть ім’я 1-го студента: ");
    scanf("%s", (*student)->Name);
    printf("Введіть вік 1-го студента: ");
    scanf("%d", &(*student)->Age);
    printf("Введіть середній рейтинг 1-го студента: ");
    scanf("%f", &(*student)->AverageRaiting);
    printf("\n");
    (*student)->nextStudent = NULL;
    struct Student* endStudent = *student;
    for (int i = 2; i <= MAX; i++)
    {
        endStudent->nextStudent =
            (struct Student*) malloc(sizeof(struct Student));
        endStudent = endStudent->nextStudent;
        endStudent->id = i;
        printf("Введіть ім’я %d-го студента: ", i);
        scanf("%s", endStudent->Name);
        printf("Введіть вік %d-го студента: ", i);
        scanf("%d", &endStudent->Age);
        printf("Введіть середній рейтинг %d-го студента: ", i);
        scanf("%f", &endStudent->AverageRaiting);
        printf("\n");
        endStudent->nextStudent = NULL;
    }
}

void PrintList(struct Student* student)
{
    struct Student* printStudent = student;
    printf("==========================\n");
    printf("Номер         Ім’я         Вік  Рейтинг \n");
    printf("==========================\n");
    while (printStudent)
    {
        printf("%d", printStudent->id);
        printf("%-15s", printStudent->Name);
        printf("%4d", printStudent->Age);
        printf("%8.2f", printStudent->AverageRaiting);
        printf("\n");
        printStudent = printStudent->nextStudent;
    }
    printf("==========================\n");
}

void FreeList(struct Student** student)
{
    if (*student == NULL)
        return;
    struct Student* tmp = *student;
    struct Student* curr_stud;
    while (tmp)
    {
        curr_stud = tmp;
        tmp = tmp->nextStudent;
        free(curr_stud);
    }
    *student = NULL;
}

void ChangeStudentName(int n, char name[KOL], struct Student* student)
{
    struct Student* changingStudent = student;
    while (changingStudent)
    {
        if (changingStudent->id == n)
        {
            changingStudent->Name = name;
            printf("зміни записані");
            break;
        }
    }
}

int main(void)
{
    int command;
    struct Student* BaseStudent = NULL;
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    InitStudentList(&BaseStudent);
    for (;;)
    {
        printf("Введіть команду:\n 1 - Виведення списку студентів,\n 2 - Змінити прізвище зазначеного студента,\n 3 - вихід\n");
        scanf("%d", &command);
        switch (command)
        {
        case 1:
            PrintList(BaseStudent);
            break;
        case 2:
            int n;
            char name[KOL];
            printf("Введіть номер студента: ");
            scanf("%d", &n);
            printf("Введіть нове ім'я студента: ");
            scanf("%s", &name);
                ChangeStudentName(n, name, BaseStudent);
            break;
        case 3:
            FreeList(&BaseStudent);
            return 0;
            break;
        default:
            printf("Помилка вводу...");
            FreeList(&BaseStudent);
            return 0;
            break;
        }
    }
    return 0;
}


Заранее благодарен!
  • Вопрос задан
  • 339 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы