喵宗 2022-11-23 22:52 采纳率: 77.8%
浏览 0
已结题

请哪位帮我看看我的问题

#include<stdio.h>
#include<stdlib.h>
//创建结构体 
struct school 
{
    char name[20];
    int age;
    char gender;
    int number;
    struct school *next;
 };
int  count ;
//创建链表 
 struct school *creat()
 {
    count=1;
    struct school *head=NULL;
    struct school *end,*news;
    end=news=(struct school*)malloc(sizeof(struct school));
    printf("现在请输入第%d位学生的资料\n",count); 
    printf("请输入学生的学号,没有学生后按0即可:");
    scanf("%d",&news->number);
    if(news->number==0)
    {
    goto s;    
    }
    printf("请输入学生的姓名:");
    scanf("%s",&news->name);
    printf("请输入学生的年龄:");
    scanf("%d",&news->age);
    printf("请输入学生的性别(M或W):");
    scanf("%s",&news->gender);
    printf("\n \n");
s:    while(news->number!=0)
    {
        count++;
        if(count==1)
        {
            news->next=head;
            head=news;
            end=news;
        }
        else
        {
            news->next=NULL;  
            end->next=news;
            end=news;
        }
        news=(struct school*)malloc(sizeof(struct school));
        printf("现在请输入第%d位学生的资料\n",count); 
        printf("请输入学生的学号:");
        scanf("%d",&news->number);
        if(news->number==0)
        {
        goto s;    
        }
        printf("请输入学生的姓名:");
        scanf("%s",&news->name);
        printf("请输入学生的年龄:");
        scanf("%d",&news->age);
        printf("请输入学生的性别:");
        scanf("%s",&news->gender);
        printf("\n \n");
        
    }
    free(news);
    return head;
    
  } 
void print(struct school *head)
  {
  count=1;
      struct school *itemp;
      itemp=head;
      while(itemp==NULL)
      {
        printf("这是第%d位同学的资料\n",count);
        printf("姓名:%s\n",itemp->name);
        printf("姓别:%c\n",itemp->gender);
        printf("年龄:%d\n",itemp->age);
        printf("学号:%d\n",itemp->number);
        printf("\n \n \n");
        itemp=itemp->next;
       }
  } 
//主函数 
int main()
{
    printf("-------XX学院学生录入系统-------\n");
    printf("请按照要求填写学生姓名,性别,年龄以及学号,\n若输入完成后学号填零即可!\n");
    printf("\n \n");
    struct school *head; 
    head=creat();
    print(head);
    return 0;
}

为什么我的输出是NULL?

  • 写回答

2条回答 默认 最新

  • qzjhjxj 2022-11-24 11:05
    关注

    修改如下,供参考:

    #include <stdio.h>
    #include <stdlib.h>
    //创建结构体 
    struct school{
        char name[20];
        int age;
        char gender;
        int number;
        struct school* next;
    };
    int  count;
    //创建链表 
    struct school* creat()
    {
        count = 0;  //修改
        struct school* head = NULL;
        struct school* end, * news;
    //    end = news = (struct school*)malloc(sizeof(struct school));
    //    printf("现在请输入第%d位学生的资料\n", count);
    //    printf("请输入学生的学号,没有学生后按0即可:");
    //    scanf("%d", &news->number);
    //    if (news->number == 0)
    //    {
    //        goto s;
    //    }
    //    printf("请输入学生的姓名:");
    //    scanf("%s", &news->name);
    //    printf("请输入学生的年龄:");
    //    scanf("%d", &news->age);
    //    printf("请输入学生的性别(M或W):");
    //    scanf("%s", &news->gender);
    //    printf("\n \n");
        while (1) //s:    while (news->number != 0) 修改
        {
            news = (struct school*)malloc(sizeof(struct school));
            printf("现在请输入第%d位学生的资料\n", count+1); //修改
            printf("请输入学生的学号:");
            scanf("%d", &news->number);
            if (news->number == 0){
                free(news);
                break;
            }
            printf("请输入学生的姓名:");
            scanf("%s", news->name);  //scanf("%s", &news->name);
            printf("请输入学生的年龄:");
            scanf("%d", &news->age);
            printf("请输入学生的性别(男:M 女:F):");
            scanf(" %c", &news->gender); //scanf("%s", &news->gender);
            printf("\n \n");
            count++;
            if (count == 1)
            {
                news->next = head;
                head = news;
                end = news;
            }
            else
            {
                news->next = NULL;
                end->next = news;
                end = news;
            }
        }
        //free(news);
        return head;
    }
    void print(struct school* head)
    {
        int cnt = 0;
        struct school* itemp;
        itemp = head;
        while (itemp != NULL) //(itemp == NULL)
        {
            cnt++;
            printf("这是第%d位同学的资料\n", cnt);
            printf("姓名:%s\n", itemp->name);
            printf("姓别:%c\n", itemp->gender);
            printf("年龄:%d\n", itemp->age);
            printf("学号:%d\n", itemp->number);
            printf("\n");
            itemp = itemp->next;
        }
    }
    //主函数 
    int main()
    {
        printf("-------XX学院学生录入系统-------\n");
        printf("请按照要求填写学生姓名,性别,年龄以及学号,\n若输入完成后学号填零即可!\n");
        printf("\n \n");
        struct school* head;
        head = creat();
        print(head);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月2日
  • 已采纳回答 11月24日
  • 创建了问题 11月23日

悬赏问题

  • ¥15 chaquopy python 安卓
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题