饭浇盖 发表于 2016-3-25 08:59:33

又来求助了

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define LEN sizeof(struct Student)
union bumen
{
        int banji;
        char zhiwu;
};
struct Student
{
       
        intinumber;
        char iname;
        char isex;
        char job;
        union bumen aa;
        struct Student *next;
};
int n;
struct Student *create()
{
        struct Student*p1,*p2,*phead;
        p1=p2=(struct Student*)malloc(LEN);
        printf("请输入学生学号");
        scanf("%d",&p1->inumber);
        printf("请输入学生姓名");
        scanf("%s",&p1->iname);
        printf("请输入性别");
        scanf("%s",&p1->isex);
        fflush(stdin);
        printf("请输入工作");
        scanf("%c",&p1->job);
        if(p1->job=='s')
        {
                printf("请输入班级");
                scanf("%d",&p1->aa.banji);
       
        }
        else
        {
                if(p1->job=='t')
                {
                        printf("请输入职务");
                        scanf("%s",p1->aa.zhiwu);
                }
                else
                {
                        printf("ERROR!");
                }
        }
        phead=NULL;
        n=0;
        while(p1->inumber)
        {
                n++;
                if(n==1)
                {
                        phead=p1;
                        }
                else
                {
                        p2->next=p1;
                        }
                p2=p1;
                p1=(struct Student*)malloc(LEN);
                printf("请输入学生学号");
                scanf("%d",&p1->inumber);
                printf("请输入学生姓名");
                scanf("%s",&p1->iname);
                printf("请输入性别");
                scanf("%s",&p1->isex);
                fflush(stdin);
                printf("请输入工作");
                scanf("%c",&p1->job);
                if(p1->job=='s')
                {
                        printf("请输入班级");
                        scanf("%d",&p1->aa.banji);
               
                }
                else
                {
                        if(p1->job=='t')
                        {
                                printf("请输入职务");
                                scanf("%s",p1->aa.zhiwu);
                        }
                        else
                        {
                                printf("ERROR!");
                        }
                }
        p2->next=NULL;
        }
        return phead;
}

void save(struct Student *p)
{
        FILE *fp;
        char filename;
        printf("请输入要创建的文件名");
        scanf("%s",filename);
        if(!(fp=fopen(filename,"wt+")))
        {
                printf("打开文件错误");
                exit(0);
        }
        while(p->inumber)                                  //调试中这一步出错,但是不知道为什么
        {
                if(fwrite(p,sizeof(struct Student),1,fp)!=1)
                {
                        printf("输入错误");
                        return;
                }
                else
                {
                        fwrite(p,sizeof(struct Student),1,fp);
                       
                }
                p=p->next;
        }
        fclose(fp);
}
void main()
{
        struct Student *str;
        str=create();
        save(str);
}

饭浇盖 发表于 2016-3-25 09:00:54

本帖最后由 饭浇盖 于 2016-3-25 10:33 编辑

我知道了 ,因为还没有把结构体输入,所以判断不出p->inumber是吗
··························
还是错误

muyu0096 发表于 2016-3-25 11:38:38

本帖最后由 muyu0096 于 2016-3-25 12:01 编辑

vs2010上运行无误
不对,好像你的链表构造都有问题,有事出去,回来看看

饭浇盖 发表于 2016-3-25 13:02:10

本帖最后由 饭浇盖 于 2016-3-25 13:38 编辑

p2->next=NULL;
应在while
外面
········································
不对,原来while(p->inumber)应该为while(p);首先确认指针是否存在

饭浇盖 发表于 2016-3-26 13:42:21

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define LEN sizeof(struct SYS)
int n;
union bumen
{
        int banji;
        char zhiwu;
};
struct SYS
{
        int num;
        char name;
        char sex;
        char job;
        union bumen aa;
        struct SYS *next;
};
struct SYS *create()
{
        struct SYS *p1,*p2,*phead;
        p1=p2=(struct SYS*)malloc(LEN);
        printf("请输入序号");
        scanf("%d",&p1->num);
        printf("请输入姓名");
        scanf("%s",&p1->name);
        printf("请输入性别");
        scanf("%s",&p1->sex);
        fflush(stdin);
        printf("请输入工作");
        scanf("%c",&p1->job);
        if(p1->job=='s')
        {
                printf("请输入班级");
                scanf("%d",&p1->aa.banji);       
        }
        else
        {
                if(p1->job=='t')
                {
                        printf("请输入职务");
                        scanf("%s",p1->aa.zhiwu);
                }
                else
                {
                        printf("没有内容\n");
                }
        }
        n=0;
        phead=NULL;
        while(p1->num)
        {
               n++;
               if(n==1)
               {
                       phead=p1;
               }
               else
               {
                       p2->next=p1;
               }
               p2=p1;
               p1=(struct SYS*)malloc(LEN);
                        printf("请输入序号");
                        scanf("%d",&p1->num);
                        printf("请输入姓名");
                        scanf("%s",&p1->name);
                        printf("请输入性别");
                        scanf("%s",&p1->sex);
                        fflush(stdin);                                                        //刷新缓存 去掉回车键
                        printf("请输入工作");
                        scanf("%c",&p1->job);                                                //刷新缓存后正确
                        if(p1->job=='s')
                        {
                                printf("请输入班级");
                                scanf("%d",&p1->aa.banji);       
                        }
                        else
                        {
                                if(p1->job=='t')
                                {
                                        printf("请输入职务");
                                        scanf("%s",p1->aa.zhiwu);
                                }
                                else
                                {
                                        printf("没有内容\n");
                                }
                        }
       }
        free(p1);
        p2->next=NULL;
        return phead;
}
int main()
{
       
       
                while(1)
                {
                        struct SYS *p;
                        p=create();
                        while(p)
                        {
                       FILE *fp=fopen("wer","ab");
                       fwrite(p,LEN,1,fp);
                       fclose(fp);
                       fp=NULL;
                       p=p->next;       
                       }
                       break;
                }
       
}
页: [1]
查看完整版本: 又来求助了