鱼C论坛

 找回密码
 立即注册
查看: 1500|回复: 9

[已解决]单独拿出来执行可以,放到这里就不行了, 请各位帅气的鱼油进来看看

[复制链接]
发表于 2018-12-4 23:37:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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上,本来是要录入两个学生的信息的,录完一个程序不知道为什么就停止执行了,不过单独把这段代码拿出来执行却可以,请各位鱼油帮我看一下。
最佳答案
2018-12-5 14:29:27
首先说一下注释,复制代码过去删注释删的炸裂。注释的格式两种:
/* 中间写注释 */
// 后面写注释
你这么写后面全是都是注释
问题:  scanf("%ld",p1->number); 这条语句,加个 & 看看,number不是地址,要取地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-12-5 00:24:02 | 显示全部楼层
写点有用的注释吧,韩式有点不好看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-5 09:12:09 | 显示全部楼层
lemon3 发表于 2018-12-5 00:24
写点有用的注释吧,韩式有点不好看。

谢谢你帮我看,我早上有重新执行一遍,想不到它就好了,真是奇怪,昨天还一直不行,今天莫名其妙就好了,不过还是要多谢你
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-5 09:23:25 | 显示全部楼层
lemon3 发表于 2018-12-5 00:24
写点有用的注释吧,韩式有点不好看。

救命呀,大哥,它又不行了,第一次执行可以,再去执行它就凉了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-5 13:13:53 | 显示全部楼层
结构能加点注释吗。超过一页而且没注释看着很难受
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-5 13:28:56 | 显示全部楼层
lemon3 发表于 2018-12-5 13:13
结构能加点注释吗。超过一页而且没注释看着很难受

兄嘚,你看这样行吗,我发现我有时候malloc可以申请内存,有时候又不可以,有点蓝瘦
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-5 13:47:38 | 显示全部楼层
可能是你申请使用之后没有释放内存,你试一下在最后释放内存一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-12-5 14:29:27 | 显示全部楼层    本楼为最佳答案   
首先说一下注释,复制代码过去删注释删的炸裂。注释的格式两种:
/* 中间写注释 */
// 后面写注释
你这么写后面全是都是注释
问题:  scanf("%ld",p1->number); 这条语句,加个 & 看看,number不是地址,要取地址
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-5 19:35:19 | 显示全部楼层
丶忘却的年少o 发表于 2018-12-5 14:29
首先说一下注释,复制代码过去删注释删的炸裂。注释的格式两种:

你这么写后面全是都是注释

多谢,我还是太粗心,以后还请多指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-12-5 19:38:09 | 显示全部楼层
lemon3 发表于 2018-12-5 13:47
可能是你申请使用之后没有释放内存,你试一下在最后释放内存一下

多谢,我把free函数写上了,考试月了,这阵子要滚回去疯狂复习了,再次感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-3 00:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表