芹菜不菜 2023-01-10 18:41 采纳率: 100%
浏览 94
已结题

c语言程序报错了打印学生信息出问题

程序运行报错了。是打印学生信息问题,可以帮忙看看如何修改吗

#include<stdio.h>
#include<stdlib.h>
void menu();       //主界面
void inputstudent();//录入学生信息
void printstudent();//打印学生信息
typedef struct _student   //定义学生  
{
    char name[30];//姓名
    int age;//年龄
    int xuehao;//学号
    int score;//分数
}student;
//结点
typedef struct _Node
{
    student stu;   //学生
    struct _Node* pNext;//指向下一个结点的指针
}Node;
Node *g_pHead=NULL;//头结点
int main()
{
    int ch;
    while (1)
    {
     menu();
    scanf("%d",&ch);       //输入所需数字
    switch(ch)
    {
    case 1://录入学生信息    
        inputstudent();
        break;
    case 2://打印学生信息
        printstudent();
        break;
    case 3://保存学生信息
        break;
    case 4://读取学生信息
        break;
    case 5://查找学生信息
        break;
    case 6://修改学生信息
        break;
    case 7://删除学生信息
        break;
    case 8://统计学生人数
        break;
    case 9://退出系统
        break;
    default:
        printf("请重新输入\n");
        break;
         }
    }
    return 0;
}

//主界面
void  menu()
{
    printf("**************************************************\n");
    printf("*         西安工程大学成绩管理系统v6.6           *\n");
    printf("**************************************************\n");
    printf("*         欢迎使用,请输入对应功能序号           *\n");
    printf("**************************************************\n");
    printf("*                1.录入学生信息                  *\n");
    printf("*                2.打印学生信息                  *\n");
    printf("*                3.保存学生信息                  *\n");
    printf("*                4.读取学生信息                  *\n");
    printf("*                5.查找学生信息                  *\n");
    printf("*                6.修改学生信息                  *\n");
    printf("*                7.删除学生信息                  *\n");
    printf("*                8.统计学生人数                  *\n");
    printf("*                9.退出系统                      *\n");
    printf("**************************************************\n");
}
void inputstudent()//录入学生信息
{
        //创建一个新节点
        Node *pNewNode=(Node*)malloc(sizeof(Node));
        pNewNode->pNext = NULL;
        //头插法
        if(g_pHead==NULL)
        {
            g_pHead = pNewNode;
        }
        else
        {
            pNewNode->pNext = g_pHead;
            g_pHead = pNewNode;
        }
        printf("请输入学生姓名:\n"); 
        scanf("%s",pNewNode->stu.name);
        printf("请输入学生年龄;\n");
        scanf("%d",&pNewNode->stu.age);
        printf("请输入学生学号:\n"); 
        scanf("%d",&pNewNode->stu.xuehao);
        printf("请输入学生成绩:\n"); 
        scanf("%d",&pNewNode->stu.score);
        printf("学生信息录入成功;\n");
        system("pause");             //暂停
        system("cls");                 //清屏
}
void printstudent()//打印学生信息
{
    printf("**************************************************\n");
    printf("*         西安工程大学成绩管理系统v6.6           *\n");
    printf("**************************************************\n");
    printf("*\t学号\t*\t姓名\t*\t年龄\t*\t成绩*\n");
    printf("**************************************************\n");
    //遍历链表
    Node*p=g_pHead;
    while(p!=NULL)
    {
        printf("*\t%d\t*\t%s\t*\t%d\t*\t%d*\n",
            p->stu.xuehao,
            p->stu.name,
            p->stu.age,
            p->stu.score);
        p=p->pNext;
    }        
    }

错误信息

img

  • 写回答

6条回答 默认 最新

  • m0_54204465 2023-01-10 21:08
    关注

    看起来你的代码是一个链表程序,它实现了存储学生信息的功能。在这里,我们只需要关注打印学生信息的部分即可。

    根据你的代码,在 "void printstudent()" 函数中没有任何打印学生信息的代码。这可能就是为什么程序运行报错了的原因。

    为了正确打印学生信息,你需要在 "void printstudent()" 函数中编写遍历链表并打印学生信息的代码。可以使用一个循环来遍历链表中的每一个结点,然后使用 "printf()" 函数来打印学生的姓名,年龄,学号和分数。

    下面是一个示例代码,它可以帮助实现打印学生信息的功能:

    void printstudent()
    {
        Node* pNode = g_pHead;//从链表头开始遍历
    
        while (pNode != NULL)
        {
            printf("姓名: %s\n", pNode->stu.name);
            printf("年龄: %d\n", pNode->stu.age);
            printf("学号: %d\n", pNode->stu.xuehao);
            printf("分数: %d\n", pNode->stu.score);
            printf("\n");
            pNode = pNode->pNext;
        }
    }
    
    

    你可以将这些代码添加到你的 "void printstudent()" 函数中。最后,确保在录入学生信息时正确地插入结点到链表中。

    还有另外两点要注意:
    1.在 switch 中的所有 case 后面都应该有 break,否则程序会继续往下执行,可能会导致意想不到的结果。
    2.在使用 scanf() 函数输入数据时要注意是否有输入错误或者输入了不符合要求的数据,这可以使用 if(scanf("%d", &ch) != 1) 进行检测。
    这是更新后的完整程序,修改了打印学生信息的部分并加入了必要的检测:

    #include<stdio.h>
    #include<stdlib.h>
    void menu();       //主界面
    void inputstudent();//录入学生信息
    void printstudent();//打印学生信息
    typedef struct _student   //定义学生  
    {
        char name[30];//姓名
        int age;//年龄
        int xuehao;//学号
        int score;//分数
    }student;
    //结点
    typedef struct _Node
    {
        student stu;   //学生
        struct _Node* pNext;//指向下一个结点的指针
    }Node;
    Node *g_pHead=NULL;//头结点
    int main()
    {
        int ch;
        while (1)
        {
         menu();
        if(scanf("%d", &ch) != 1){
            printf("请输入数字\n");
            continue;
        }
        switch(ch)
        {
        case 1://录入学生信息    
            inputstudent();
            break;
        case 2://打印学生信息
            printstudent();
            break;
        case 3://保存学生信息
            break;
        case 4://读取学生信息
            break;
        case 5://查找学生信息
            break;
        case 6://修改学生信息
            break;
        case 7://删除学生信息
            break;
        case 8://统计学生人数
            break;
        case 9://退出系统
            return 0;
            break;
        default:
            printf("请重新输入\n");
            break;
             }
        }
        return 0;
    }
    //主界面
    void  menu()
    {
        printf("**************************************************\n");
        printf("*         西安工程大学成绩管理系统v6.6           *\n");
        printf("**************************************************\n");
        printf("*         欢迎使用,请输入对应功能序号           *\n");
        printf("**************************************************\n");
        printf("*                1.录入学生信息 \n");
    printf(" 2.打印学生信息 \n");
    printf(" 3.保存学生信息 \n");
    printf(" 4.读取学生信息 \n");
    printf(" 5.查找学生信息 \n");
    printf(" 6.修改学生信息 \n");
    printf(" 7.删除学生信息 \n");
    printf(" 8.统计学生人数 \n");
    printf(" 9.退出系统 *\n");
    printf("**************************************************\n");
    }
    
    void inputstudent()//录入学生信息{
    Node* pNode = (Node*)malloc(sizeof(Node));//分配空间
    printf("请输入学生姓名:");
    scanf("%s", pNode->stu.name);
    printf("请输入学生年龄:");
    scanf("%d", &pNode->stu.age);
    printf("请输入学生学号:");
    scanf("%d", &pNode->stu.xuehao);
    printf("请输入学生分数:");
    scanf("%d", &pNode->stu.score);
    pNode->pNext = g_pHead;
    g_pHead = pNode;
    }
    
    void printstudent()
    {
    Node* pNode = g_pHead;//从链表头开始遍历while (pNode != NULL)
    {
        printf("姓名: %s\n", pNode->stu.name);
        printf("年龄: %d\n", pNode->stu.age);
        printf("学号: %d\n", pNode->stu.xuehao);
        printf("分数: %d\n", pNode->stu.score);
        printf("\n");
        pNode = pNode->pNext;
    }}
    
    

    这段代码中已经考虑了输入错误的情况,在 case 9 中设置了退出程序。而且修改了 printstudent() 中遍历链表并打印学生信息的部分。

    现在您可以编译并运行这个程序,看看是否能运行。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 1月10日
  • 已采纳回答 1月10日
  • 修改了问题 1月10日
  • 修改了问题 1月10日
  • 展开全部

悬赏问题

  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上