c语言的问题,和结构体有关,希望大神能帮忙解答

就是一个信息系统,func1的功能是信息录入,学号num为零的表示结束录入,主函数就先不谢了,后面有错误信息,前面用结构体录入了学号,名字,性别,年龄,科目成绩#incl... 就是一个 信息系统,func1的功能是信息录入,学号num为零的表示结束录入,主函数就先不谢了,后面有错误信息,前面用结构体录入了学号,名字,性别,年龄,科目成绩
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct student)
#define NULL 0
struct score /*用来记录各科成绩准备后面补充的*/
{
int math;

};
struct student /*声明一个结构体用来记录学生信息*/
{
int num;
char name[20];
char sex;
int age;
struct score subject;
struct student *next;
};

void funct1()
{
printf("请录入学生信息,学号为0代表录入完成\n");
struct student *p1,*p2;
struct student.subject math;
p1=p2=( struct student*) malloc(LEN); /* 从这里开始时想做第一个信息录入*/
printf("请输入学号\n");
scanf("%d",&p1->num);
printf("\n请输入该生姓名");
gets(p1->name);
printf("\n请输入该生性别\n");
for(;p1->sex=='f'||p1->sex=='m';)
{
p1->sex=getchar();
printf( "\nerror,please input again:\n");
}
printf("\n请输入该生年龄\n");
scanf("%d",&p1->age);
printf("\n请输入该生成绩,以逗号隔开\n");
scanf("%f",&p1->subject->math); /*到这里让p1指向第一组数据结束*/
head=NULL;
while (p1->num!=0) /*循环跳出的条件是学号num为零*/
{
n=n+1;
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct student*) malloc(LEN);
printf("请输入学号\n");
scanf("%d",&p1->num);
printf("\n请输入该生姓名");
gets(p1->name);
printf("\n请输入该生性别\n");
for(;p1->sex=='f'||p1->sex=='m';)
{
p1->sex=getchar();
printf( "\nerror,please input again:\n");
}
printf("\n请输入该生年龄\n");
scanf("%d",&p1->age);
printf("\n请输入该生成绩,以逗号隔开\n");
scanf("%f",&p1->subject->math);
}
p2->next=NULL;
}

以下是错误信息,好像一直都是一个地方出错
:\新建文件夹\student information.c(6) : warning C4005: 'NULL' : macro redefinition
d:\microsoft visual studio\vc98\include\stdio.h(212) : see previous definition of 'NULL'
D:\新建文件夹\student information.c(26) : error C2143: syntax error : missing ';' before 'type'
D:\新建文件夹\student information.c(27) : error C2143: syntax error : missing ';' before 'type'
D:\新建文件夹\student information.c(28) : error C2065: 'p1' : undeclared identifier
D:\新建文件夹\student information.c(28) : error C2065: 'p2' : undeclared identifier
D:\新建文件夹\student information.c(28) : warning C4047: '=' : 'int ' differs in levels of indirection from 'struct student *'
D:\新建文件夹\student information.c(30) : error C2223: left of '->num' must point to struct/union
D:\新建文件夹\student information.c(32) : error C2223: left of '->name' must point to struct/union
D:\新建文件夹\student information.c(32) : error C2198: 'gets' : too few actual parameters
展开
 我来答
百度网友1785ee410
2011-05-21 · TA获得超过570个赞
知道小有建树答主
回答量:782
采纳率:80%
帮助的人:175万
展开全部
#include <stdio.h>
#include <malloc.h>
#define LEN sizeof(struct student)
#define NULL 0

char *head;//补充的定义
int n; //补充的定义

struct score /*用来记录各科成绩准备后面补充的*/
{
int math;

};
struct student /*声明一个结构体用来记录学生信息*/
{
int num;
char name[20];
char sex;
int age;
struct score subject;
struct student *next;
};

void funct1()
{
printf("请录入学生信息,学号为0代表录入完成\n");
struct student *p1,*p2;
//struct student.subject math;这句话有问题!! student.subject不是一个关键字。直接调用p1.subject.math即可
p1=p2=( struct student*) malloc(LEN); /* 从这里开始时想做第一个信息录入*/
printf("请输入学号\n");
scanf("%d",&p1->num);
printf("\n请输入该生姓名");
gets(p1->name);
printf("\n请输入该生性别\n");
for(;p1->sex=='f'||p1->sex=='m';)
{
p1->sex=getchar();
printf( "\nerror,please input again:\n");
}
printf("\n请输入该生年龄\n");
scanf("%d",&p1->age);
printf("\n请输入该生成绩,以逗号隔开\n");
scanf("%f",&p1->subject.math); /*到这里让p1指向第一组数据结束*/ //scanf("%f",&p1->subject->math);这句话有问题!!subject是指针,math不是,不能混用
head=NULL;//这句话有问题,head未定义!! 帮你补充在函数程序开头了!
while (p1->num!=0) /*循环跳出的条件是学号num为零*/
{
n=n+1;//这句话有问题,n未定义!! 也是随便补充一下了~
if(n==1)head=p1;
else p2->next=p1;
p2=p1;
p1=(struct student*) malloc(LEN);
printf("请输入学号\n");
scanf("%d",&p1->num);
printf("\n请输入该生姓名");
gets(p1->name);
printf("\n请输入该生性别\n");
for(;p1->sex=='f'||p1->sex=='m';)
{
p1->sex=getchar();
printf( "\nerror,please input again:\n");
}
printf("\n请输入该生年龄\n");
scanf("%d",&p1->age);
printf("\n请输入该生成绩,以逗号隔开\n");
scanf("%f",&p1->subject.math);//同上!!!
}
p2->next=NULL;
}

//不知道你到底要干什么,但是你的BUG解决了~~~
追问
谢谢大神~~~~~~···(写得那么乱还拿出来丢人)
可是我加了定义(好奇问一下,Head不是应该指向我定义引用p1.subject. math的地方都删了,结果还是有bug
追答
...........................................................
一般的说head不是应该是链表的首个节点的地址么??
zhucy0107
2011-05-23
知道答主
回答量:14
采纳率:0%
帮助的人:2.1万
展开全部
typedef struct /*声明一个结构体用来记录学生信息*/
{
int num;
char name[20];
char sex;
int age;
struct score subject;
struct student *next;
}student;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ccxnepdi
2011-05-21
知道答主
回答量:10
采纳率:0%
帮助的人:4万
展开全部
struct student *p1,*p2;
该为
student *p1,*p2;
试一试。
追问
试过了,错误就增加了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式