| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
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不是地址,要取地址  
 
 
 |   
 
 
 
 |