switch不能用while循环

代码是照着视频打的,视频那个跑得起来我的就不行
到底是哪里不对
.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();

img

修改如下,改动处见注释,供参考:

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

你的代码没有输出的代码逻辑
本来就是如此,输入完就结束了。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/650046
  • 这篇博客也不错, 你可以看下Switch语句:空指针异常
  • 除此之外, 这篇博客: C语言入门篇 一.分支和循环语句中的 2.switch语句 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    switch(整型表达式)
    {
       语句项;
    }

    语句项指:

    case 整形常量表达式:
       语句;
    break;
    //或者
    default :
    语句;
    break;
    //break;可加可不加
    switch语句根据整形表达式的值选择case入口,代码从入口往下执行,如果所有case都不满足,则从default进入,进入后倘若无break;代码则一直往下执行直到遇到}为止。
    switch语句可以嵌套使用。

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^