C - Когда программа достигает определенного метода, она просто заканчивается, почему это так? - PullRequest
0 голосов
/ 02 апреля 2020

Итак, я пишу программу, в которой есть меню выбора, из которого пользователь может выбирать, где он может вставлять, считать, печатать, удалять и изменять узлы. У пользователя также есть шестая опция, чтобы просто выйти из программы. Моя проблема в том, что всякий раз, когда пользователь выбирает 5-ю опцию, которая изменяет узел студента, программа просто внезапно заканчивается, вместо того, чтобы возвращаться в меню. Почему это так и как я могу это исправить?

Вот функция модификации, которая работает неправильно:

void modifyStudentNode()
{
    int id = 0;
    struct student *ptr, *prev, *currPtr;
    if(start==NULL)
    {
        printf("\nStudent List does not contain data\n");
    }
    else
    {
        printf("\nPlease enter the student ID of the student whose records you wish to modify: \n");
        scanf("%d",&id);
        fflush(stdin);
        for(currPtr = start; (currPtr)&&((currPtr->student_id)!= id); prev = currPtr, currPtr = currPtr->next);

        if(currPtr == NULL)
            printf("\nStudent not Found\n");
        else
        {
            printf("\nCurrent values for Student Id %d are: ", id);
            printf("Student Name: %s\n", currPtr->student_name);
            printf("Student GPA: %.2f\n", currPtr->gpa);
            printf("Student Date of Registration: %d/%d/%d\n\n", currPtr->dt_of_reg.month,currPtr->dt_of_reg.day,currPtr->dt_of_reg.year);
            printf("\nEnter modified values for Student Id %d: \n", id);
            printf("Enter Student's Modified Name:\n");
            scanf("%[^\t\n]s",&currPtr->student_name);
            fflush(stdin);
            printf("Enter Student's Modified GPA:\n");
            scanf("%f",&currPtr->gpa);
            fflush(stdin);
            printf("Enter Student's Modified Date of Registration (mm/dd/yyyy):\n");
            scanf("%d/%d/%d", &currPtr->dt_of_reg.month,currPtr->dt_of_reg.day,currPtr->dt_of_reg.year);
            fflush(stdin);
        }
    }
}

1 Ответ

1 голос
/ 02 апреля 2020

Ваша строка

scanf("%d/%d/%d", &currPtr->dt_of_reg.month,currPtr->dt_of_reg.day,currPtr->dt_of_reg.year);

должна быть

scanf("%d/%d/%d", &currPtr->dt_of_reg.month, &currPtr->dt_of_reg.day, &currPtr->dt_of_reg.year);

Вы забыли добавить & для последних обоих чисел.

...