代码没有语法错误,但运行出来有错误,并没有按照我代码的意思去运行
代码修改完善如下,供参考:
#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()
{
NodepNewNode = (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))//是否是文件的末尾
{
NodepNewNode = (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");
}