下面是本人写的程序,目的是想完成当输入(学号为0同时姓名为0时),结束创建链表;
而当学号为0,姓名不为0时,继续循环创建;当学号或姓名只有一个为0,而输入的3门成绩(sc[3])都为0时,此时把学号和姓名同时赋值为0,并结束创建连表)
#include <stdio.h>
#include <malloc.h>
#include <string.h>
struct student
{ long num;//学号
char name[20];
float sc[3];//3门成绩
struct student *next;
};
typedef struct student STU;
STU *creat() //建立链表函数
{STU *head,*p1,*p2;
int i;
head=(STU *)malloc(sizeof(STU));
p2=head;
head->next=NULL;
do {
p1=(STU *)malloc(sizeof(STU));
puts("===============================");
printf("请输入学号:");
scanf("%ld",&p1->num);
printf("请输入姓名:");
scanf("%s",p1->name);
printf("请输入3门成绩:");
for(i=0;i<3;i++)
if(scanf("%f",&p1->sc[i])!=1){p1->num=0;strcpy(p1->name,"\0");} //当输入3门成绩都为0时将学号,姓名赋值为0
for(;i<3;i++)p1->sc[i]=0; //当输入的成绩有个别没有输入时,自动赋值为0
p1->next=NULL;
p2->next=p1;
p2=p2->next;
}while(p1->num!=0||p1->name!="\0");
return head;
}
main()
{STU *head;
head=creat();
}
可是本程序一直循环,请问该怎么改 错在了那里?