单独拿出来执行可以,放到这里就不行了, 请各位帅气的鱼油进来看看
本帖最后由 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用来存放尾零
char sex; /*学生的性别,最大长度为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上,本来是要录入两个学生的信息的,录完一个程序不知道为什么就停止执行了,不过单独把这段代码拿出来执行却可以,请各位鱼油帮我看一下。{:10_287:} 写点有用的注释吧,韩式有点不好看。 lemon3 发表于 2018-12-5 00:24
写点有用的注释吧,韩式有点不好看。
谢谢你帮我看,我早上有重新执行一遍,想不到它就好了,真是奇怪,昨天还一直不行,今天莫名其妙就好了,不过还是要多谢你{:10_326:} lemon3 发表于 2018-12-5 00:24
写点有用的注释吧,韩式有点不好看。
救命呀,大哥,它又不行了,第一次执行可以,再去执行它就凉了 结构能加点注释吗。超过一页而且没注释看着很难受 lemon3 发表于 2018-12-5 13:13
结构能加点注释吗。超过一页而且没注释看着很难受
兄嘚,你看这样行吗,我发现我有时候malloc可以申请内存,有时候又不可以,有点蓝瘦{:10_272:} 可能是你申请使用之后没有释放内存,你试一下在最后释放内存一下 首先说一下注释,复制代码过去删注释删的炸裂。注释的格式两种:
/* 中间写注释 */
// 后面写注释
你这么写后面全是都是注释
问题:scanf("%ld",p1->number); 这条语句,加个 & 看看,number不是地址,要取地址 丶忘却的年少o 发表于 2018-12-5 14:29
首先说一下注释,复制代码过去删注释删的炸裂。注释的格式两种:
你这么写后面全是都是注释
多谢,我还是太粗心,以后还请多指教{:10_275:} lemon3 发表于 2018-12-5 13:47
可能是你申请使用之后没有释放内存,你试一下在最后释放内存一下
多谢,我把free函数写上了,{:10_275:}考试月了,这阵子要滚回去疯狂复习了,再次感谢。{:10_275:}
页:
[1]