[求助]一个结构体的问题,百思不得其解,为什么呢
下面一个函数中,添加的新成员如果直接写成struct stu NEW,不用指针就不成功,大虾们解释一下,谢了Add() /*添加学生信息函数*/
{
int i;
struct stu *NEW;
struct stu *p;
NEW=(struct stu *)malloc(sizeof(struct stu)); /*新开辟一个空间*/
clrscr();
gotoxy(15,4);printf("Now input a student's basic information.");
gotoxy(15,6);printf("ID:");scanf("%s",NEW->ID);
for(p=&head;strcmp(p->ID,NEW->ID)!=0&&p->next!=NULL;p=p->next); /*检查原来学生链表中是否存在你输入的学生证号*/
if(strcmp(p->ID,NEW->ID)!=0) /*如果不存在就继续添加*/
{
gotoxy(15,7);printf("name:");scanf("%s",NEW->name);
gotoxy(15,8);printf("major:");scanf("%s",NEW->major);
gotoxy(15,9);printf("class:");scanf("%d",&NEW->Class);
NEW->next=NULL;
p->next=NEW; /*使原来最后一个学生中的指针指向新加的学生*/
head.Class++; /*总成员人数加1*/
gotoxy(15,11);
printf("Add successfully!");
}
else /*如果存在,就输出该学生证好已经存在的信息*/
{
gotoxy(15,12);
printf("Sorry,this ID has existed!");
}
}
修改后如下,就会出现错误结果
Add() /*添加学生信息函数*/
{
int i;
struct stu NEW;
struct stu *p;
clrscr();
gotoxy(15,4);printf("Now input a student's basic information.");
gotoxy(15,6);printf("ID:");scanf("%s",NEW.ID);
for(p=&head;strcmp(p->ID,NEW.ID)!=0&&p->next!=NULL;p=p->next);
if(strcmp(p->ID,NEW.ID)!=0) /*如果不存在就继续添加*/
{
gotoxy(15,7);printf("name:");scanf("%s",NEW.name);
gotoxy(15,8);printf("major:");scanf("%s",NEW.major);
gotoxy(15,9);printf("class:");scanf("%d",&NEW.Class);
NEW.next=NULL;
p->next=&NEW; /*使原来最后一个学生中的指针指向新加的学生*/
head.Class++; /*总成员人数加1*/
gotoxy(15,11);
printf("Add successfully!");
}
else /*如果存在,就输出该学生证好已经存在的信息*/
{
gotoxy(15,12);
printf("Sorry,this ID has existed!");
}
}