![]() |
#2
吹水佬2020-05-20 05:21
|
只有本站会员才能查看附件,请 登录
为什么我输入了学号后就无法再运行下去了?
这是我的测试代码:

#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);
}