命定869 2023-02-19 17:11 采纳率: 57.1%
浏览 22
已结题

链表遍历打印不出来里面的内容

用功能8录入学生信息后,使用功能6打印不出来链表里面的内容,求解
运行结果及详细报错内容

img

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void help();
void addstu();   //录入学生信息
void printfstu();  //打印学生信息 
void yemian();

typedef struct stu
{
    int ID;// 学号 
    char name[10];  //姓名 
    char day[15];  //日期 
    char ma[5];    //健康码 
    char fangshi[10];   //返校方式 
    char chaci[20];    //车次
    char leixing[10];      //风险类型 
    char tujing[20];      // 途经城市 
    char hesuanshijian[10]; // 核酸时间 及结果 
    struct stu* next;
}student;

//节点 
typedef struct Node
{
    student stu;    //学生 
    struct Node* pNext;
}Node;
Node *g_pHead = NULL;  //头结点 

//-----------------------------主函数----------------------
int main()
{
    int choice,t;
        while(1)
        {
            yemian();
            scanf("%d",&choice);
            switch (choice) 
            {
                case 0:
                help();
                break;//帮助信息
                
                case 1:
//                head = readInfo(head);
                 ; break; //刷新人员信息  
                  
                case 2:
                printf("请输入身份证号:\n");
//                tmp = seacher(head, id);
//                if (tmp) printSingle(tmp);
//                else printf("该人员信息不存在!\n");
                break;//查询人员信息
                
                case 3:
                printf("请输入要更改人员的身份证号:\n");
//                tmp = seacher(head, id);
//                if (tmp) change(tmp);
//                else printf("该人员信息不存在!\n");
                ; break;//修改人员信息
                
                case 4:
//                head=addPeople(head);
                ; break;//增加人员信息
                
                case 5:
                printf("请输入要删除的编号:\n");
//                scanf("%d", &t);
//                head=delByNum(head, t);
                ; break;//按编号删除信息  
                
                case 6:
                printfstu();
                ; break;//显示当前信息
                
                case 7:
//                save(head);
                ; break;//保存当前人员信息
                
                case 8:
                addstu();
                 break;
                
                case 9:
//                saveAd(Admihead);
                printf("成功退出!欢迎下次使用!\n");
                return 0;; break; //退出系统
         
                default:printf("请输入正确的序号(0~8)!\n");
            }
            system("pause");
            system("cls");
        }
    return 0;
}





//-----------------------------函数区---------------------

void yemian()
{
    printf(" *******************************************************\n\n");
        printf(" *                    疫情防控管理系统                   *\n");
        printf(" *******************************************************\n\n");
        printf("***********************系统功能菜单***********************\n");
        printf("**********************请选择功能编号************************\n");
        printf("    -------------------------     ------------------------\n");
        printf("    *****************************************************\n");
        printf("    * 0.系统帮助及说明      * * 1.刷新人员信息          *\n");
        printf("    *****************************************************\n");
        printf("    * 2.查询人员信息        * * 3.修改人员信息          *\n");
        printf("    *****************************************************\n");
        printf("    * 4.增加人员信息        * * 5.按编号删除信息        *\n");
        printf("    *****************************************************\n");
        printf("    * 6.打印学生信息        * * 7.保存当前人员信息      *\n");
        printf("    *****************************************************\n");
        printf("    * 8.疫情问卷调查填报    * * 9.退出系统               \n");
        printf("    *****************************************************\n");
        printf("    -------------------------    ------------------------\n");
} 

void help()
{
    printf("-------------------帮助信息-------------------\n\n");
    printf("1.输入序号1~9、并回车,选择相应功能。\n");
    printf("2.身份证默认18位。\n");
    printf("4.退出程序之前要保存当前信息。\n");
    printf("5.由于格式问题,在文件中直接更改的话可能导致部分数据乱码。\n");
    printf("6.功能2中的查询信息可以根据姓名、城市、健康码类别(红码/黄码)核酸阳性查询。\n");
}


void addstu ()
{
    //创建新的节点 
    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("%d",&(pNewNode->stu.ID));
    
    printf("请输入姓名\n");
    scanf("%d",pNewNode->stu.name);
    
    printf("请输入到校日期,例如:yyyy-mm-dd\n");
    scanf("%d",pNewNode->stu.day);
    
    printf("请选择健康码类型,红码填A,黄码填B,绿码填C\n");
    scanf("%c",pNewNode->stu.ma);
    
    printf("请选择返校方式(单选题)\nA火车/动车/高铁\nB飞机\nC自驾\nD其他\n");
    scanf("%c",pNewNode->stu.fangshi);
    
    printf("请输入乘坐车次\n");
    scanf("%c",pNewNode->stu.chaci);
    
    printf("请选择风险类型(单选题)\nA无\nB途径高风险地区\nC居住在高风险地区\nD密接高危人群\n");
    scanf("%c",pNewNode->stu.leixing);
    
    printf("请输入途经城市(包括家和学校所在城市,城市间用空格分隔)\n");
    scanf("%c",pNewNode->stu.tujing);
    
    printf("请输入最近一次做核酸时间,格式为:yyyy-nn-dd\n请选择最近一次核酸结果,—表示阴性,+表示阳性\n");
    scanf("%c",pNewNode->stu.hesuanshijian);
    
    printf("学生信息录入完成\n");
}

void printfstu ()
{
    printf(" ******************************************************************\n\n");
    printf(" * \t                           疫情防控管理系统              \t       *\n");
    printf("*\t学号\t姓名\t到校日期\t健康码\t返校方式\t车次\t风险类型\t途经城市\t核算时间\n");
    
    //遍历链表
    Node* p=g_pHead;
    while(p!=NULL)
    {
        printf("\t%d\t%s\t%s\t*%s\t*%s\t*%s\t*%s\t*%s\t*%s\t*%s*\n",p->stu.ID,p->stu.name,p->stu.day,p->stu.ma,p->stu.fangshi,
        p->stu.chaci,p->stu.leixing,p->stu.tujing,p->stu.hesuanshijian);
        p=p->pNext; 
    }
}


  • 写回答

2条回答 默认 最新

  • CodeBytes 2023-02-19 18:47
    关注

    该回答引用ChatGPT

    在你的代码中有一些明显的问题,可能导致无法正确打印链表中的数据:

    在addstu函数中,你在使用scanf函数输入字符串时,应该使用%s格式控制符,而不是%d。

    在addstu函数中,你在使用scanf函数输入字符串时,应该在字符串前面加上一个空格,以消除前面的换行符。

    在addstu函数中,你在使用scanf函数输入字符时,应该在字符前面加上一个空格,以消除前面的换行符。

    在printfstu函数中,你在打印日期和健康码时,应该将其放在一个大括号中,以避免格式化字符串错误。

    下面是已经修改过的addstu和printfstu函数:

    void addstu()
    {
        //创建新的节点
        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("%d", &(pNewNode->stu.ID));
    
        printf("请输入姓名\n");
        scanf(" %s", pNewNode->stu.name);
    
        printf("请输入到校日期,例如:yyyy-mm-dd\n");
        scanf(" %s", pNewNode->stu.day);
    
        printf("请选择健康码类型,红码填A,黄码填B,绿码填C\n");
        scanf(" %c", &(pNewNode->stu.ma));
    
        printf("请选择返校方式(单选题)\nA火车/动车/高铁\nB飞机\nC自驾\nD其他\n");
        scanf(" %s", pNewNode->stu.fangshi);
    
        printf("请输入乘坐车次\n");
        scanf(" %s", pNewNode->stu.chaci);
    
        printf("请选择风险类型(单选题)\nA无\nB途径高风险地区\nC居住在高风险地区\nD密接高危人群\n");
        scanf(" %s", pNewNode->stu.leixing);
    
        printf("请输入途经城市(包括家和学校所在城市,城市间用空格分隔)\n");
        scanf(" %s", pNewNode->stu.tujing);
    
        printf("请输入最近一次做核酸时间,格式为:yyyy-nn-dd\n请选择最近一次核酸结果,-表示阴性,+表示阳性\n");
        scanf(" %s", pNewNode->stu.hesuanshijian);
    
        printf("学生信息录入完成\n");
    }
    
    void printfstu()
    {
        printf(" ******************************************************************\n\n");
        printf(" * \t                           疫情防控管理系统              \t       *\n");
        printf("*\t学号\t姓名\t到校日期\t健康
    
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月27日
  • 已采纳回答 2月19日
  • 创建了问题 2月19日

悬赏问题

  • ¥20 Linux上make出现错误不知道怎么解决
  • ¥15 prism提示我reinstall prism 如何解决
  • ¥15 asp.core 权限控制怎么做,需要控制到每个方法
  • ¥20 while循环中OLED显示中断中的数据不正确
  • ¥15 这个视频里的stm32f4代码是怎么写的
  • ¥15 JNA调用DLL报堆栈溢出错误(0xC00000FD)
  • ¥15 请教SGeMs软件的使用
  • ¥15 自己用vb.net编写了一个dll文件,如何只给授权的用户使用这个dll文件进行打包编译,未授权用户不能进行打包编译操作?
  • ¥50 深度学习运行代码直接中断
  • ¥20 需要完整的共散射点成像代码