首页 > 解决方案 > C - 当程序到达某个方法时,它就结束了,这是为什么呢?

问题描述

所以我正在编写一个程序,它有一个选择菜单,用户可以从中选择他们可以插入、计数、打印、删除和修改节点的位置。用户还有第六个选项可以退出程序。我的问题是,每当用户选择第 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);
        }
    }
}

标签: cfunctionerror-handling

解决方案


你的线

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

您忘记&为最后两个数字添加 。


推荐阅读