测试代码时发现问题,思考了很久仍然无法解决,请各位帮忙
运行结果截图如下:为什么我输入了学号后就无法再运行下去了?
这是我的测试代码:
程序代码:
#include <stdio.h> #include <stdlib.h> #define maxsize 100 #define newnode (node*)malloc(sizeof(node*)) typedef struct k { char name[maxsize]; //姓名 int xuehao; //学号 int age; //年龄 char sex[maxsize]; //性别 char birth[maxsize]; //出生日期 int number; //电话号码 struct k *next; }node; int xh;//用来储存学号的中间变量 void meun()//菜单显示界面 { printf("********************************************************\n"); printf("**************欢迎使用学生信息管理系统*****************\n"); printf("*****************请选择您的操作************************\n"); printf(" 1.浏览学生信息 \n"); printf(" 2.增加学生信息 \n"); printf(" 2.删除学生信息 \n"); printf(" 3.修改学生信息 \n"); printf(" 4.查找学生的信息 \n"); printf(" 0.退出系统 \n"); printf("********************************************************\n"); } void insert(node *h)//增加学生信息 { node *p,*tail; //分别指向新建结点和尾结点 node *s,*pre;//用来查找链表尾结点的中间结点 node *q; //用来检测是否存在相同学号的中间结点 s=h->next; while(s!=NULL) //找到链表的尾结点 { pre=s; s=s->next; } tail=pre; q=h->next; int i,j; printf("请输入您要添加的学生人数:\n"); scanf("%d",&i); for(j=0;j<i;j++) { printf("请输入学生学号:\n"); scanf("%d",xh); while(q!=NULL)//判断是否有相同学号的学生存在 { if(q->xuehao==xh) { printf("该名学生已存在!"); break; } q=q->next; } if(q==NULL)//此时已不存在相同学号的学生 { p=newnode; p->next=NULL; printf("请分别输入学生的姓名、学号、年龄、性别、电话号码、出生日期:\n"); scanf("%s %d %d %s %d %s",p->name,&p->xuehao,&p->age,p->sex,&p->number,p->birth); tail->next=p;tail=p; } q=h->next; } } void print(node *h)//打印学生信息 { node *p=h->next; printf("\n姓名 性别 学号 年龄 出生日期 电话号码:\n"); while(p!=NULL) { printf("%s %s %d %d %s %d\n",p->name,p->sex,p->xuehao,p->age,p->birth,p->number); p=p->next; } } int main() { node *h; h=newnode;h->next=NULL; insert(h); print(h); }