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

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

img

img

img

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

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

语法没有错误,但运行出来有错误啊怎么办用的vs2022的编译器
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.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()
{
Welcome();
char ch = getch();
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", p->stu.stuNum);
}
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;
}
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;
if (pHead == NULL)
{
pHead = pNewNode;
}
else
{
pNewNode->pNext = pHead;
pHead = pNewNode;
}

printf("请输入学生的姓名:\n");
scanf_s("%s",pNewNode->stu.name);
printf("请输入学生的学号:\n");
scanf_s("%d",&pNewNode->stu.stuNum);
printf("请输入学生的性别:\n");
scanf_s("%s",pNewNode->stu.gender);
printf("请输入学生的地址:\n");
scanf_s("%s",pNewNode->stu.hometown);
printf("请输入学生的成绩:\n");
scanf_s("%d", &pNewNode->stu.score); 
printf("学生信息录入成功\n");
system("pause");//暂停
system("cls");//清屏

}
void PrintStudent()
{
printf("*****************************************\n");
printf("\t欢迎使用高校学生信息管理系统\t\n");
printf("*****************************************\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;
}

}
void SaveStudent()
{
//打开文件
FILEfp = fopen("D:\stuinfo.dat","w");
if (fp == NULL)
{
printf("打开文件失败\n");
return;
}
//遍历链表
Node
p = pHead;
while (p!= NULL)
{
fwrite(&p->stu,1,sizeof(Student),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, 1, sizeof(Student), fp))//是否是文件的末尾
{
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("请输入需要修改的学生姓名 性别 地址 成绩:\n");
            scanf_s("%s %s %s %d",p->stu.name,p->stu.gender,p->stu.hometown,&p->stu.score);
            printf("修改成功\n");
            break;
        }
        p = p->pNext;
    }
    if (p == NULL)
    {
        printf("没有找到该学生\n");
    }
    system("pause");
    system("cls");

}

img

可以查看手册:c语言-错误处理-错误号 中的内容