m0_59900231 2021-12-24 23:35 采纳率: 50%
浏览 42
已结题

为什么输出学生信息只能输出第一个?

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN sizeof(struct student)
struct student
{
        long int student_number;        //定义学生的学号 
        char student_name[20];              //定义学生的姓名 
        int student_age;                //定义学生的年龄 
        char student_sex[20];               //定义学生的性别 
        long int student_phone_number;       //定义学生的手机号码 
        int student_grade;              //定义学生的成绩 
        struct student* next;
};
struct student*the_first();
struct student*p;
struct student*creat(struct student*s);                 //声明一个创建学生信息的函数     
void printf_student_message(struct student*h);     //声明一个浏览学生信息的函数  
void menu();                            //声明一个输出界面的函数 
void search_student_message();
void student_message_change();
void student_message_delete();
int n;                                    //定义一个全局变量n 
struct student* head; 
int main()                              //定义一个主函数 
{   
    int i; 
    struct student*p=NULL;
    while(1)
    {
        menu();
        scanf("%d",&i);           
    switch(i)
    {
        case 1:    
                printf("     1.查询学生信息              \n");
                search_student_message();
                system("pause");
                break;
        case 2:
                printf("      2.修改学生信息              \n");
                student_message_change();
                system("pause");   
                break;
        case 3:
                printf("      3.录入学生信息              \n");
                p=creat(p);
                system("pause");
                break;
        case 4:
                printf("      4.删除学生信息              \n");
                printf("请输入要删除的学生的姓名:\n");
                student_message_delete();
                system("pause");
                break;
        case 5:
                printf("      5.浏览学生信息              \n");
                printf_student_message(head);           //调用一个查找学生信息的函数 
                system("pause");
                break;
        case 6:printf("正在退出程序\n");break;
        default:
            {
            printf("输入错误请重新输入:\n");
            system("pause");
            }
}
        if(i==6)break;
        system("pause");
        system("cls");
}
}
void menu()    //输出界面的一个函数 
{
    printf("                               学生信息管理系统              ");
    printf("\n"); 
    printf("     1.查询学生信息                                  2.修改学生信息                     ");
    printf("\n");
    printf("     3.录入学生信息                                  4.删除学生信息");
    printf("\n");
    printf("     5.浏览学生信息                                  6.退出程序                ");
    printf("\n");
    printf("请输入选项\n");
}
struct student*creat(struct student*s)                         //定义一个创建学生信息的函数      
{
    int i;
    printf("继续请按1\n");
    printf("退出请按2\n");
    while(1)
    {
    scanf("%d",&i);
    switch(i)
    {
    case 1:
    struct student*node;
    node=(struct student*)malloc(LEN);
    printf("请输入学生的学号\n");
    scanf("%ld",&node->student_number);
    printf("请输入学生的姓名\n");
    scanf("%s",node->student_name);
    printf("请输入学生的年龄\n");
    scanf("%d",&node->student_age);
    printf("请输入学生的性别\n");
    scanf("%s",node->student_sex);
    printf("请输入学生的手机号码\n");
    scanf("%ld",&node->student_phone_number);
    printf("请输入学生的成绩\n");
    scanf("%d",&node->student_grade);
    if(n==0)
    {
    head=node;
    return node;
    }
    else
    {
    s->next=node;
    node->next=NULL;
    n=n+1;
    return node;
    }
    break;
    case 2:break;
}
   break;
}
}
void printf_student_message(struct student*h)
{
    if(h!=NULL)
    {
    for(;h->next!=NULL;)
    {
        printf("%ld,%s,%d,%s,%ld,%d\n",h->student_number,h->student_name,h->student_age,h->student_sex,h->student_phone_number,h->student_grade);
        h=h->next;
    }
    }
}
void search_student_message()
{
    int i;
    char a[20];
    long int l;
    struct student*s;
    printf("请输入以下选项\n");
    printf("1.按学号查找学生\n");
    printf("2.按姓名查找学生\n");
    printf("3.退回主菜单\n");
    printf("请输入选项\n");
    while(1)
    {
    scanf("%d",&i);
    switch(i)
    {
    case 1:
    printf("请输入学生的学号\n");
    scanf("%ld",&s->student_number);
    for(;;s=s->next)
    {
        if(s->next==NULL)
        {
            printf("输入信息有误");
            break;
        }
        if(s->student_number==l)
        {
        printf("要查找的学生的信息是:\n");
        printf("%ld,%s,%d,%s,%ld,%d",s->student_number,s->student_name,s->student_age,s->student_sex,s->student_phone_number,s->student_grade);    
        break;
        }
    }
    break;
    case 2:
    {
    printf("请输入学生的姓名\n");
    scanf("%s",a);
    for(;;s=s->next)
    {
        if(s->next==NULL)
        {
            printf("输入信息有误");
            break;
        }
        if(strcmp(a,s->student_name)==0)
        {
        printf("要查找的学生的信息为:\n");
        printf("%ld,%s,%d,%s,%ld,%d",s->student_number,s->student_name,s->student_age,s->student_sex,s->student_phone_number,s->student_grade);    
        break;
        }
    }
    case 3:
    printf("正在退回主菜单");
    }
    break;
}
    if(i==3)break;
}
}
void student_message_delete()
{
        int i;
    char a[20];
    long int l;
    struct student*p; 
    struct student*s;
    printf("请输入以下选项\n");
    printf("1.按学生的学号来删除学生信息\n");
    printf("2.按学生的姓名来删除学生的信息\n");
    printf("3.退回主菜单\n");
    printf("请输入选项\n");
    while(1)
    {
    scanf("%d",&i);
    switch(i)
    {
    case 1:
    printf("请输入学生的学号\n");
    scanf("%ld",&s->student_number);
    for(;;s=s->next)
    {
        if(s->next==NULL)
        {
        printf("未找到该学生");
        break;
        }
        if(s->student_number==l)
        {
        p=s->next;
        s->next=p->next;
        free(p);
        printf("删除信息成功:\n");
        break; 
        }
    }
    break;
    case 2:
    printf("请输入学生的姓名\n");
    scanf("%s",a);
    for(;;s=s->next)
    {
        if(s->next==NULL)
        {
            printf("未找到该学生");
            break;
        }
        if(strcmp(a,s->student_name)==0)
        {
        p=s->next;
        s->next=p->next;
        free(p);
        printf("删除信息成功");
        break;
        }    
    }
    case 3:
    printf("正在退回主菜单");
    break;
}
    if(i==3)break;
}
}
void student_message_change()
{
    int i;
    char a[20];
    long int l;
    struct student*s;
    printf("请输入以下选项\n");
    printf("1.按学号查找学生\n");
    printf("2.按姓名查找学生\n");
    printf("3.退回主菜单\n");
    printf("请输入选项\n");
    while(1)
    {
    scanf("%d",&i);
    switch(i)
    {
    case 1:
    printf("请输入学生的学号\n");
    scanf("%ld",&s->student_number);
    for(;s->student_number!=l;s=s->next)
    {
        if(s->next==NULL)
        {
            printf("查找失败");
            break;
        }
        if(s->student_number==l)
        {
        printf("%ld,%s,%d,%s,%ld,%d",s->student_number,s->student_name,s->student_age,s->student_sex,s->student_phone_number,s->student_grade);
        printf("请输入要更改的学生的信息\n");
        scanf("%ld,%s,%d,%s,%ld,%d",&s->student_number,s->student_name,&s->student_age,s->student_age,&s->student_phone_number,&s->student_grade);
        break;
        }
    }
    break;
    case 2:
    printf("请输入学生的姓名\n");
    scanf("%s",a);
    for(;;s=s->next)
    {
        if(s->next==NULL)
        {
        printf("查找失败");
        break;
        }
        if(strcmp(a,s->student_name)==0)
        {
        printf("%ld,%s,%d,%s,%ld,%d",s->student_number,s->student_name,s->student_age,s->student_sex,s->student_phone_number,s->student_grade);
        printf("请输入要更改的学生的信息\n");
        scanf("%ld,%s,%d,%s,%ld,%d",&s->student_number,s->student_name,&s->student_age,s->student_age,&s->student_phone_number,&s->student_grade);
        break;
        }
    }
    case 3:
    printf("正在退回主菜单");
    break;
}
      if(i==3)break;
}
}
```c

```c

```c



```

  • 写回答

1条回答 默认 最新

  • 关注
    creat(struct student *s)函数中
                if (n == 0)
                {
                    head = node;
                    n = n + 1;         //加上这行
                    node->next = NULL; //加上这行
                    return node;
                }
                else
                {
                    s->next = node;
                    node->next = NULL;
                    n = n + 1;
                    return node;
                }
     
    
    printf_student_message()函数中
    
        for (; h != NULL;)//去掉->next
    

    代码修改如下

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define LEN sizeof(struct student)
    struct student
    {
        long int student_number;       //定义学生的学号
        char student_name[20];         //定义学生的姓名
        int student_age;               //定义学生的年龄
        char student_sex[20];          //定义学生的性别
        long int student_phone_number; //定义学生的手机号码
        int student_grade;             //定义学生的成绩
        struct student *next;
    };
    struct student *the_first();
    struct student *p;
    struct student *creat(struct student *s);       //声明一个创建学生信息的函数
    void printf_student_message(struct student *h); //声明一个浏览学生信息的函数
    void menu();                                    //声明一个输出界面的函数
    void search_student_message();
    void student_message_change();
    void student_message_delete();
    int n; //定义一个全局变量n
    struct student *head;
    int main() //定义一个主函数
    {
        int i;
        struct student *p = NULL;
        while (1)
        {
            menu();
            scanf("%d", &i);
            switch (i)
            {
            case 1:
                printf("     1.查询学生信息              \n");
                search_student_message();
                system("pause");
                break;
            case 2:
                printf("      2.修改学生信息              \n");
                student_message_change();
                system("pause");
                break;
            case 3:
                printf("      3.录入学生信息              \n");
                p = creat(p);
                system("pause");
                break;
            case 4:
                printf("      4.删除学生信息              \n");
                printf("请输入要删除的学生的姓名:\n");
                student_message_delete();
                system("pause");
                break;
            case 5:
                printf("      5.浏览学生信息              \n");
                printf_student_message(head); //调用一个查找学生信息的函数
                system("pause");
                break;
            case 6:
                printf("正在退出程序\n");
                break;
            default:
            {
                printf("输入错误请重新输入:\n");
                system("pause");
            }
            }
            if (i == 6)
                break;
            system("pause");
            system("cls");
        }
    }
    void menu() //输出界面的一个函数
    {
        printf("                               学生信息管理系统              ");
        printf("\n");
        printf("     1.查询学生信息                                  2.修改学生信息                     ");
        printf("\n");
        printf("     3.录入学生信息                                  4.删除学生信息");
        printf("\n");
        printf("     5.浏览学生信息                                  6.退出程序                ");
        printf("\n");
        printf("请输入选项\n");
    }
    struct student *creat(struct student *s) //定义一个创建学生信息的函数
    {
        int i;
        printf("继续请按1\n");
        printf("退出请按2\n");
        while (1)
        {
            scanf("%d", &i);
            switch (i)
            {
            case 1:
                struct student *node;
                node = (struct student *)malloc(LEN);
                printf("请输入学生的学号\n");
                scanf("%ld", &node->student_number);
                printf("请输入学生的姓名\n");
                scanf("%s", node->student_name);
                printf("请输入学生的年龄\n");
                scanf("%d", &node->student_age);
                printf("请输入学生的性别\n");
                scanf("%s", node->student_sex);
                printf("请输入学生的手机号码\n");
                scanf("%ld", &node->student_phone_number);
                printf("请输入学生的成绩\n");
                scanf("%d", &node->student_grade);
                if (n == 0)
                {
                    head = node;
                    n = n + 1;         //加上这行
                    node->next = NULL; //加上这行
                    return node;
                }
                else
                {
                    s->next = node;
                    node->next = NULL;
                    n = n + 1;
                    return node;
                }
                break;
            case 2:
                break;
            }
            break;
        }
    }
    void printf_student_message(struct student *h)
    {
        for (; h != NULL;)//去掉->next
        {
            printf("%ld,%s,%d,%s,%ld,%d\n", h->student_number, h->student_name, h->student_age, h->student_sex, h->student_phone_number, h->student_grade);
            h = h->next;
        }
    }
    void search_student_message()
    {
        int i;
        char a[20];
        long int l;
        struct student *s;
        printf("请输入以下选项\n");
        printf("1.按学号查找学生\n");
        printf("2.按姓名查找学生\n");
        printf("3.退回主菜单\n");
        printf("请输入选项\n");
        while (1)
        {
            scanf("%d", &i);
            switch (i)
            {
            case 1:
                printf("请输入学生的学号\n");
                scanf("%ld", &s->student_number);
                for (;; s = s->next)
                {
                    if (s->next == NULL)
                    {
                        printf("输入信息有误");
                        break;
                    }
                    if (s->student_number == l)
                    {
                        printf("要查找的学生的信息是:\n");
                        printf("%ld,%s,%d,%s,%ld,%d", s->student_number, s->student_name, s->student_age, s->student_sex, s->student_phone_number, s->student_grade);
                        break;
                    }
                }
                break;
            case 2:
            {
                printf("请输入学生的姓名\n");
                scanf("%s", a);
                for (;; s = s->next)
                {
                    if (s->next == NULL)
                    {
                        printf("输入信息有误");
                        break;
                    }
                    if (strcmp(a, s->student_name) == 0)
                    {
                        printf("要查找的学生的信息为:\n");
                        printf("%ld,%s,%d,%s,%ld,%d", s->student_number, s->student_name, s->student_age, s->student_sex, s->student_phone_number, s->student_grade);
                        break;
                    }
                }
            case 3:
                printf("正在退回主菜单");
            }
            break;
            }
            if (i == 3)
                break;
        }
    }
    void student_message_delete()
    {
        int i;
        char a[20];
        long int l;
        struct student *p;
        struct student *s;
        printf("请输入以下选项\n");
        printf("1.按学生的学号来删除学生信息\n");
        printf("2.按学生的姓名来删除学生的信息\n");
        printf("3.退回主菜单\n");
        printf("请输入选项\n");
        while (1)
        {
            scanf("%d", &i);
            switch (i)
            {
            case 1:
                printf("请输入学生的学号\n");
                scanf("%ld", &s->student_number);
                for (;; s = s->next)
                {
                    if (s->next == NULL)
                    {
                        printf("未找到该学生");
                        break;
                    }
                    if (s->student_number == l)
                    {
                        p = s->next;
                        s->next = p->next;
                        free(p);
                        printf("删除信息成功:\n");
                        break;
                    }
                }
                break;
            case 2:
                printf("请输入学生的姓名\n");
                scanf("%s", a);
                for (;; s = s->next)
                {
                    if (s->next == NULL)
                    {
                        printf("未找到该学生");
                        break;
                    }
                    if (strcmp(a, s->student_name) == 0)
                    {
                        p = s->next;
                        s->next = p->next;
                        free(p);
                        printf("删除信息成功");
                        break;
                    }
                }
            case 3:
                printf("正在退回主菜单");
                break;
            }
            if (i == 3)
                break;
        }
    }
    void student_message_change()
    {
        int i;
        char a[20];
        long int l;
        struct student *s;
        printf("请输入以下选项\n");
        printf("1.按学号查找学生\n");
        printf("2.按姓名查找学生\n");
        printf("3.退回主菜单\n");
        printf("请输入选项\n");
        while (1)
        {
            scanf("%d", &i);
            switch (i)
            {
            case 1:
                printf("请输入学生的学号\n");
                scanf("%ld", &s->student_number);
                for (; s->student_number != l; s = s->next)
                {
                    if (s->next == NULL)
                    {
                        printf("查找失败");
                        break;
                    }
                    if (s->student_number == l)
                    {
                        printf("%ld,%s,%d,%s,%ld,%d", s->student_number, s->student_name, s->student_age, s->student_sex, s->student_phone_number, s->student_grade);
                        printf("请输入要更改的学生的信息\n");
                        scanf("%ld,%s,%d,%s,%ld,%d", &s->student_number, s->student_name, &s->student_age, s->student_age, &s->student_phone_number, &s->student_grade);
                        break;
                    }
                }
                break;
            case 2:
                printf("请输入学生的姓名\n");
                scanf("%s", a);
                for (;; s = s->next)
                {
                    if (s->next == NULL)
                    {
                        printf("查找失败");
                        break;
                    }
                    if (strcmp(a, s->student_name) == 0)
                    {
                        printf("%ld,%s,%d,%s,%ld,%d", s->student_number, s->student_name, s->student_age, s->student_sex, s->student_phone_number, s->student_grade);
                        printf("请输入要更改的学生的信息\n");
                        scanf("%ld,%s,%d,%s,%ld,%d", &s->student_number, s->student_name, &s->student_age, s->student_age, &s->student_phone_number, &s->student_grade);
                        break;
                    }
                }
            case 3:
                printf("正在退回主菜单");
                break;
            }
            if (i == 3)
                break;
        }
    }
    

    如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分