m0_65234038 2022-06-20 12:50 采纳率: 70%
浏览 33
已结题

代码没有错误,但运行出来有错误

代码没有语法错误,但运行出来有错误,并没有按照我代码的意思去运行

img

img

img

  • 写回答

3条回答 默认 最新

  • qzjhjxj 2022-06-20 15:33
    关注

    代码修改完善如下,供参考:

    #include <stdio.h>
    #include <conio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <windows.h>
    //定义一个学生
    typedef struct _Student
    {
        char name[20];
        int  stuNum;
        char gender[10];
        char hometown[20];
        int  score;
    }Student;
    
    typedef struct _Node
    {
        Student stu;
        struct _Node* pNext;//指向下一个学生的指针
    }Node;
    
    Node* pHead = NULL;
    
    void Welcome();
    //录入学生的信息
    void  InputStudent();
    void  PrintStudent();
    void  SaveStudent();
    void  ReadStudent();
    Node* FindStudent();
    void ModifyStudent();
    int main()
    {
        do {
            Welcome();
            char ch;  //char ch = getch();
            printf("请选择(0-6):");
            scanf(" %c", &ch);
            getchar();
            switch (ch)
            {
            case'1':
                InputStudent();
                break;
            case'2':
                PrintStudent();
                break;
            case'3':
                SaveStudent();
                break;
            case'4':
                ReadStudent();
                break;
            case'5': {
                Node* p = FindStudent();
                if (p != NULL)
                {
                    printf("学号:%d 姓名:%s\n", p->stu.stuNum, p->stu.name);
                }
                else
                    printf("没有找到该学生\n");
                system("pause");//暂停
                system("cls");//清屏
                break;
            }
            case'6':
                ModifyStudent();
                break;
            case'0':
                printf("BYE BYE\n");
                return 0;
            default:
                printf("你的输入有误,请重新输入\n");
                system("pause");//暂停
                system("cls");//清屏
                break;
            }
        } while (1);
        return 0;
    }
    void Welcome()
    {
        printf("*****************************************\n");
        printf("\t欢迎使用高校学生信息管理系统\t\n");
        printf("****************************************\n");
        printf("\t\t请选择功能列表\t\t\n");
        printf("\t\t1.录入学生信息\t\t\n");
        printf("\t\t2.打印学生信息\t\t\n");
        printf("\t\t3.保存学生信息\t\t\n");
        printf("\t\t4.读取学生信息\t\t\n");
        printf("\t\t5.查找学生信息\t\t\n");
        printf("\t\t6.修改学生信息\t\t\n");
        printf("\t\t0.退出系统\t\t\n");
    }
    void InputStudent()
    {
        Node* pNewNode = (Node*)malloc(sizeof(Node));
        pNewNode->pNext = NULL;
        printf("请输入学生的姓名:\n");
        scanf_s("%s", pNewNode->stu.name, 20);
        printf("请输入学生的学号:\n");
        scanf_s("%d", &pNewNode->stu.stuNum);
        printf("请输入学生的性别:\n");
        scanf_s("%s", pNewNode->stu.gender, 10);
        printf("请输入学生的地址:\n");
        scanf_s("%s", pNewNode->stu.hometown, 20);
        printf("请输入学生的成绩:\n");
        scanf_s("%d", &pNewNode->stu.score);
        if (pHead == NULL)
        {
            pHead = pNewNode;
        }
        else
        {
            pNewNode->pNext = pHead;
            pHead = pNewNode;
        }
        printf("学生信息录入成功\n");
        system("pause");//暂停
        system("cls");  //清屏
    }
    void PrintStudent()
    {
        system("cls");  //清屏
        printf("\t\t\t*****************************************\n");
        printf("\t\t\t\t欢迎使用高校学生信息管理系统\t\n");
        printf("\t\t\t*****************************************\n");
    
        printf("\t学号\t*\t姓名\t*\t性别\t*\t地址\t*\t成绩*");
        printf("*****************************************\n");
        Node* p = pHead;
        while (p != NULL)
        {
            printf("*\t%d\t*\t%s\t*\t%s\t*\t%s\t*\t%d*\n",
                p->stu.stuNum,
                p->stu.name,
                p->stu.gender,
                p->stu.hometown,
                p->stu.score);
            p = p->pNext;
        }
        system("pause");//暂停
        system("cls");  //清屏
    }
    void SaveStudent()
    {
        //打开文件
        FILE* fp = fopen("D:\\stuinfo.dat", "w");
        if (fp == NULL)
        {
            printf("打开文件失败\n");
            return;
        }
        //遍历链表
        Node* p = pHead;
        while (p != NULL)
        {
            fwrite(&p->stu, sizeof(Student), 1, fp);
            p = p->pNext;
        }
        fclose(fp);
        printf("\n保存数据成功\n");
        system("pause");
        system("cls");
    }
    void ReadStudent()
    {
        FILE* fp = fopen("D:\\stuinfo.dat", "r");
        if (fp == NULL)
        {
            printf("打开文件失败\n");
            return;
        }
        //读文件
        Student stu;
        while (fread(&stu, sizeof(Student), 1, fp) == 1)
        {
            Node* pNewNode = (Node*)malloc(sizeof(Node));
            pNewNode->pNext = NULL;
            memcpy(pNewNode, &stu, sizeof(Student));
            if (pHead == NULL)
            {
                pHead = pNewNode;
            }
            else
            {
                pNewNode->pNext = pHead;
                pHead = pNewNode;
            }
        }
        fclose(fp);
        printf("加载数据成功\n");
        system("pause");
        system("cls");
    }
    Node* FindStudent()
    {
        int nStuNum;
        printf("请输入需要查找的学生的学号:\n");
        scanf_s("%d", &nStuNum);
        Node* p = pHead;
        while (p != NULL)
        {
            if (p->stu.stuNum == nStuNum)
            {
                return p;
            }
            p = p->pNext;
        }
        return NULL;
    }
    void ModifyStudent()
    {
        int nStuNum;
        printf("请输入需要修改的学生信息的学号:\n");
        scanf_s("%d", &nStuNum);
        Node* p = pHead;
        while (p != NULL)
        {
            if (p->stu.stuNum == nStuNum)
            {
                printf("需要修改的学生信息 姓名:%s 性别:%s 地址:%s 成绩:%d\n", p->stu.name,
                                                   p->stu.gender, p->stu.hometown, p->stu.score);
                printf("请输入修改的信息:\n");
                scanf_s("%s %s %s %d", p->stu.name, 20, p->stu.gender, 10, 
                                        p->stu.hometown, 20, &p->stu.score);
                printf("修改成功\n");
                break;
            }
            p = p->pNext;
        }
        if (p == NULL)
        {
            printf("没有找到该学生\n");
        }
        system("pause");
        system("cls");
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月28日
  • 已采纳回答 6月20日
  • 创建了问题 6月20日