cfcys‖XDU 2021-11-23 21:12 采纳率: 0%
浏览 18
已结题

用结构体链表创建一个学生管理系统时的困惑

问题遇到的现象和发生背景

我在对照着《啊哈,算法》这边书在学习链表,我试着去创建一个学生管理系统,这是我的代码

问题相关代码,请勿粘贴截图
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
    struct Student {
        char name[100];
        int age;
        char num[100];
        struct Student * next;
    };
    struct Student *head,*q,*p,*t;
    int i,n,a,ch;
    char buf[100];
    printf("请输入学生的数量:");
    scanf("%d", &n);
    head=NULL;
    for(i=0;i<n;i++){
        p=(struct Student *)malloc(sizeof(struct Student));
        printf("请输入第%d个学生的姓名",i+1);
        scanf("%s",buf);
        while ((ch = getchar()) != EOF && ch != '\n')
        {
        ;
        }
        strcpy(buf,p->name);
        printf("请输入第%d个学生的年龄",i+1);
        scanf("%d",&a);
        p->age=a;
        printf("请输入第%d个学生的学号",i+1);
        scanf("%s",buf);
        while ((ch = getchar()) != EOF && ch != '\n')
        {
        ;
        }
        strcpy(buf,p->num);
        p->next=NULL;
        if(head==NULL){
            head=p;
        }else{
            q->next = p;
        }q=p;
    }
    t=head;
    printf("请输入插班生的年龄");
    scanf("%d",&a);
    while(t!=NULL){
        if(t->next->age > a){
            p=(struct Student *)malloc(sizeof(struct Student));
            p->age=a;
            printf("请输入插班生的学号");
            scanf("%s",buf);
            while ((ch = getchar()) != EOF && ch != '\n')
            {
            ;
            }
            strcpy(buf,p->name);
            printf("请输入插班生的姓名");
            scanf("%s",buf);
            while ((ch = getchar()) != EOF && ch != '\n')
            {
            ;
            }
            strcpy(buf,p->name);
            t->next=p->next;
            p=t->next;
            break; 
        }
        t=t->next;
    }
    t=head;i=1;
    while(t!=NULL){
        printf("%d 位:",i);
        puts(p->name);
        printf("%d  ",p->age);
        puts(p->num);
        i++;
        t=t->next;
    }
    getchar();
    getchar(); 
    return 0;
 } 

运行结果及报错内容

当我在输入完结果等待输出时,只输出了一个
1位 然后程序就终止了,并且return了一个很大的值,明显不正常

我的解答思路和尝试过的方法

我在使用codeblocks调试时,在我输入完第一个学生的姓名后发现让我输入-13564413位学生的年龄,这是我在别的时候没有遇到过的

我想要达到的结果

我像知道我的程序错误在哪,因为编译的时候编译器并没有报错也没有警告

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月1日
    • 创建了问题 11月23日

    悬赏问题

    • ¥15 如何在ns3中实现路径的自由切换
    • ¥20 SpringBoot+Vue3
    • ¥15 IT从业者的调查问卷
    • ¥65 LineageOs-21.0系统编译问题
    • ¥30 关于#c++#的问题,请各位专家解答!
    • ¥15 App的会员连续扣费
    • ¥15 不同数据类型的特征融合应该怎么做
    • ¥15 用proteus软件设计一个基于8086微处理器的简易温度计
    • ¥15 用联想小新14Pro
    • ¥15 multisim中关于74ls192n和DSWPK开关仿真图分析(减法计数器)