代码是照着视频打的,视频那个跑得起来我的就不行
到底是哪里不对
.c:
#define _CRT_SECURE_NO_WARNINGS 1
#include"StudentSystenManager.h"
int main(){
//创建头结点
Node* head = malloc(sizeof(Node));
head->next = NULL;
while (1)
{
welcome();
char c = _getch();
switch (c)
{
case '1': //录入学生信息
inputStudent(head);
break;
case '2': //打印学生信息
break;
case '3': //统计学生人数
break;
case '4': //查找学生信息
break;
case '5': //修改学生信息
break;
case '6': //删除学生信息
break;
case '7': //按成绩排序
break;
case '8': //退出系统
break;
default:
break;
}
}
return 0;
}
void welcome(){
printf("*********************************\n");
printf("*\t学生成绩管理系统\t*\n");
printf("*\t请选择功能列表\t\t*\n");
printf("*********************************\n");
printf("*\t1.录入学生信息\t\t*\n");
printf("*\t2.打印学生信息\t\t*\n");
printf("*\t3.统计学生人数\t\t*\n");
printf("*\t4.查找学生信息\t\t*\n");
printf("*\t5.修改学生信息\t\t*\n");
printf("*\t6.删除学生信息\t\t*\n");
printf("*\t7.按成绩排序\t\t*\n");
printf("*\t退出系统\t\t*\n");
printf("*********************************\n");
}
void inputStudent(Node* head){
Node* fresh = malloc(sizeof(Node));
fresh->next = NULL;
printf("请输入学生的学号、姓名、成绩");
scanf("%d%s%d", &fresh->student.stuNum, fresh->student.name, 4, &fresh->student.score);
Node* move = head;
while (move->next != NULL){
move = move->next;
}
//将学生插入到尾部
move->next = fresh;
}
.h:
#include
#include
#include
//学生信息
typedef struct _Student
{
int stuNum;
char name[20];
int score;
}Student;
//结点信息
typedef struct _Node
{
Student student;
struct _Node* next;
}Node;
void welcome();
void inputStudent();
修改如下,改动处见注释,供参考:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
//学生信息
typedef struct _Student
{
int stuNum;
char name[20];
int score;
}Student;
//结点信息
typedef struct _Node
{
Student student;
struct _Node* next;
}Node;
void welcome();
void inputStudent(Node* head);//修改
//void inputStudent(); 修改 函数声明和函数实现 参数、名称等必须一致
void printStudent(Node* head); //修改
#define _CRT_SECURE_NO_WARNINGS 1
//#include"StudentSystenManager.h"
int main() {
//创建头结点
Node* head = (Node*)malloc(sizeof(Node)); // 修改
//Node* head = malloc(sizeof(Node));
head->next = NULL;
int exit = 1; // 修改
while (1)
{
welcome();
char c = _getch();
switch (c)
{
case '1': //录入学生信息
inputStudent(head);
break;
case '2': //打印学生信息
printStudent(head); // 修改
break;
case '3': //统计学生人数
break;
case '4': //查找学生信息
break;
case '5': //修改学生信息
break;
case '6': //删除学生信息
break;
case '7': //按成绩排序
break;
case '8': //退出系统 // 修改
exit = 0;
break;
default:
break;
}
if (!exit) break; //退出系统 修改
printf("按任意键继续..."); // 修改
_getch(); // 修改
}
return 0;
}
void welcome() {
printf("*********************************\n");
printf("*\t学生成绩管理系统\t*\n");
printf("*\t请选择功能列表\t\t*\n");
printf("*********************************\n");
printf("*\t1.录入学生信息\t\t*\n");
printf("*\t2.打印学生信息\t\t*\n");
printf("*\t3.统计学生人数\t\t*\n");
printf("*\t4.查找学生信息\t\t*\n");
printf("*\t5.修改学生信息\t\t*\n");
printf("*\t6.删除学生信息\t\t*\n");
printf("*\t7.按成绩排序\t\t*\n");
printf("*\t8.退出系统\t\t*\n");
printf("*********************************\n");
}
void inputStudent(Node* head) {
Node* fresh = (Node*)malloc(sizeof(Node)); // 修改
//Node* fresh = malloc(sizeof(Node));
fresh->next = NULL;
printf("请输入学生的学号、姓名、成绩"); // 修改
scanf("%d%s%d", &fresh->student.stuNum, fresh->student.name, &fresh->student.score); // scanf()函数输入字符串不需要缓冲区大小的参数
//scanf("%d%s%d", &fresh->student.stuNum, fresh->student.name, 4, &fresh->student.score); 修改
Node* move = head;
while (move->next != NULL) {
move = move->next;
}
//将学生插入到尾部
move->next = fresh;
}
void printStudent(Node* head) // 修改
{
if (!head || !head->next)
printf("NULL\n");
else {
Node* p = head->next;
while (p) {
printf("%d %s %d\n", p->student.stuNum, p->student.name, p->student.score);
p = p->next;
}
}
}
你的代码没有输出的代码逻辑
本来就是如此,输入完就结束了。
语句项指: