又来求助了
#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 10:33 编辑
我知道了 ,因为还没有把结构体输入,所以判断不出p->inumber是吗
··························
还是错误 本帖最后由 muyu0096 于 2016-3-25 12:01 编辑
vs2010上运行无误
不对,好像你的链表构造都有问题,有事出去,回来看看 本帖最后由 饭浇盖 于 2016-3-25 13:38 编辑
p2->next=NULL;
应在while
外面
········································
不对,原来while(p->inumber)应该为while(p);首先确认指针是否存在 #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]