可以帮我看下这里有问题吗? 其它部分没有问题 这里输出时只显示-1
void keep(struct student* head)//保存函数{
FILE* ke_;
if(head == NULL)
{
printf("请在保存之前输入学生信息\n");
return ;
}
ke_ = open();//打开一个文件
sing(ke_, head);
fclose(ke_);
printf("保存完毕!\n");
}
void keep_1(FILE* ke_, struct student* node)//将其中一条信息保存
{
int i;
putc(node ->nember, ke_);
for(i = 0; node ->name[i] != '\0'; i++)
putc(node ->name[i], ke_);
putc('\0', ke_);
putc(node ->age, ke_);//
for(i = 0; node ->sex[i]; i++)//性别
putc(node ->sex[i], ke_);
putc('\0', ke_);
}
int sing(FILE* st1, struct student* head)//将全部信息保存
{
while(emptylist(head))
{
keep_1(st1, head);
head = head ->next;
}
return 1;
}
FILE* open(void)//将打开的文件返回 打开一个用于保存
{
FILE* fr;
fr = fopen("informatio.txt", "w");//注意每次的写入都会使其原有的数据丢失
if(fr == NULL)
exit(1);
return fr;
}//但是这里没有办法验证因为保存的是一些乱码 可能是保存的格式有问题
FILE* open_1(void)
{
FILE* fr;
fr = fopen("informatio.txt", "r");
if(fr == NULL)
exit(1);
return fr;
}
struct student* fetch(void)//返回读取文件中的数据返回一个指针
{
struct student* head = NULL;
struct student* st1, *st2;
FILE* fe_;
int n = 0;
head = distr();
fe_ = open_1();
head ->nember = getc(fe_);
if(head ->nember != -1)//注意文件的结束标志
{
free(head);
printf("请先保存信息!\n");
return NULL;
}
atable(head, fe_);
st1 = st2 = head;
while(st2 ->nember != -1)
{
n++;
if(n == 1)
;
else
st1 ->next = st2;
st1 = st2;
st2 = distr();
st2 ->nember = getc(fe_);
if(st2 ->nember == EOF)
free(st2);
else
atable(st2, fe_);
}
st1 ->next = NULL;
return head;
}
void atable(struct student* st1, FILE* at)//d读取文件中一个成员的信息
{
int i;
for(i = 0; st1 ->name[i] != '\0'; ++i)
st1 ->name[i] = getc(at);
st1 ->age = getc(at);
for(i = 0; st1 ->sex[i] != '\0'; ++i)
st1 ->sex[i] = getc(at);