|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 Luker 于 2018-12-5 13:26 编辑
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define LEN sizeof(struct student)
#define BEN sizeof(struct score)
#define SEX 4 /*学生性别的长度
#define NAME 10 /*学生名字的长度
#define N 2 /*输入N个学生的信息
struct student* InputStudent();
void DisplayMenu(struct student *);
void SortStudent(struct student *,int choice,int rank);
struct student* GetOrderDir(int choice,struct student *);
void OutputStudent(struct student*);
void zilow(char *a);
void numlow(int *a);
void zihigh(char *a);
void numhigh(int *a);
struct score
{
int C;
int English; /*学生各科分数
int Math;
};
struct student
{
long number; /*学生的学号,因为长度较长,用long类型
char name[NAME+1]; /*学生的姓名,最大长度为NAME,后面的1用来存放尾零
char sex[SEX+1]; /*学生的性别,最大长度为SEX,后面的1用来存放尾零
int old; /*学生的年龄
struct score peo; /*学生分数的结构体
struct student *next; /*指向下一个结点的指针
};
int main(void)
{
struct student *head;
printf("请输入%d个学生的信息:\n",N);
head=InputStudent(); /*主要是在这里出现错误!!!
DisplayMenu(head);
return 0;
}
struct student* InputStudent()
{
int i=0;
struct student *head,*p1,*p2;
head=(struct student*)malloc(LEN+BEN); /*创建表头
p1=head;
while(i<N)
{
if(i!=0)
{
p1=(struct student*)malloc(LEN+BEN); /*如果不是表头(即i!=0),则建立新结点,如果是表头,跳过
}
printf("请输入第%d个学生的信息:\n",i+1); /*学生信息输入
printf("学号:");
scanf("%ld",p1->number);
printf("姓名:");
scanf("%s",p1->name);
printf("性别:");
scanf("%s",p1->sex);
printf("年龄:");
scanf("%d",&p1->old);
printf("C成绩:");
scanf("%d",&p1->peo.C);
printf("英语成绩:");
scanf("%d",&p1->peo.English);
printf("高数成绩:");
scanf("%d",&p1->peo.Math);
if(i!=0)
{
p2->next=p1; /* 如果不是表头,则将前一个结点的next指针指向下一个结点
}
p2=p1; /* 将p2移动p1
i++;
}
p1->next=NULL; /*将最后结点的next指针指向NULL
return head; /*返回创建好的链表的头指针
}
这个程序后面的代码没附上,问题主要出在这个InputStudent上,本来是要录入两个学生的信息的,录完一个程序不知道为什么就停止执行了,不过单独把这段代码拿出来执行却可以,请各位鱼油帮我看一下。
首先说一下注释,复制代码过去删注释删的炸裂。注释的格式两种: 你这么写后面全是都是注释
问题: scanf("%ld",p1->number); 这条语句,加个 & 看看,number不是地址,要取地址
|
|