纯C问题,请帮我将这个程序的读写问题解决一下,500分相谢,分五次给(一)!!!

bright5 2004-02-21 05:41:09
学生管理程序如下,其它都没毛病,但是写完之后再读一次数据就改变了
#include<stdlib.h>
#include<stdio.h>
#include<malloc.h>
struct list{
int num;
char name[256];
int china;
int english;
int math;
struct list *next;
};
typedef struct list node;
typedef node *link;
FILE *fin;
FILE *fout;
link head = NULL;

void readFromFile()
{ node *p,*s;
head=NULL;
p = head;
if((fin=fopen("data.dat","rb"))==NULL){
printf("Cannot open this file!\n");
exit(0);
}
while(!feof(fin)){
s =(node *)malloc(sizeof(struct list));
fread(s,sizeof(struct list),1,fin);
p->next = s;
p = s;
}
p->next = NULL;
p = head;
head = head->next;
free(p);
printf("all infomation is loaded!\n");
printf("please do some choise\n");
close(fin);
}
void saveToFile(){
node * p =head;
int *i=(int *)malloc(1);
*i=EOF;

if((fout=fopen("data.dat","wb"))==NULL){
printf("cannot open this file!\n");
exit(0);
}
if(p==NULL) fwrite(i,1,1,fout);
while(p!=NULL){
fwrite(p,sizeof(struct list),1,fout);
p = p->next;
}
close(fout);
}


void printf_list()
{
link pointer;
pointer=head;
while(pointer!=NULL)
{printf("_________________\n");
printf("ID:%d\n",pointer->num);
printf("name:%s\n",pointer->name);
printf("china:%d\n",pointer->china);
printf("english:%d\n",pointer->english);
printf("math:%d\n",pointer->math);
printf("_________________\n");
pointer=pointer->next;
getch();
}

}
link creat_list()
{
int cnum;
char cname[256];
int cchina;
int cenglish;
int cmath;
link pointer, newd;
int i;
head=(link)malloc(sizeof(node));
if(head==NULL)
{ printf("memory allocate failure!!\n");
exit(0);}
else{
printf("please input ID:");
scanf("%d",&cnum);
printf("please input name:");
scanf("%s",&cname);
printf("please input china:");
scanf("%d",&cchina);
printf("please input english:");
scanf("%d",&cenglish);
printf("please input math:");
scanf("%d",&cmath);
head->num=cnum;
for(i=0;i<256;i++)
{
head->name[i]=cname[i];
}
head->china=cchina;
head->english=cenglish;
head->math=cmath;
head->next=NULL;
pointer=head;
while(1)
{
newd=(link)malloc(sizeof(node));
if(newd==NULL){
printf("memory allocate failure!!\n");
exit(0);}
printf("please input ID:");
scanf("%d",&cnum);
if(cnum==0){
break; }
printf("please input name:");
scanf("%s",cname);
printf("please input china:");
scanf("%d",&cchina);
printf("please input english:");
scanf("%d",&cenglish);
printf("please input math:");
scanf("%d",&cmath);
newd->num=cnum;
for(i=0;i<256;i++){
newd->name[i]=cname[i];}
newd->china=cchina;
newd->english=cenglish;
newd->math=cmath;
newd->next=NULL;
pointer->next=newd;
pointer=newd;
}
}
return head;
}
void search_chengji(int key1)
{
link pointer;
pointer=head;
while(pointer!=NULL)
{
if(pointer->num==key1)
{
printf("ID:%d\n",pointer->num);
printf("name:%s\n",pointer->name);
printf("china:%d\n",pointer->china);
printf("english:%d\n",pointer->english);
printf("math:%d\n",pointer->math);
}
pointer=pointer->next;
}
}
link modify_chengji(int key3)
{

link pointer;
char xname[256];
int xchina;
int xenglish;
int xmath;
int choose,i;
pointer=head;
printf("enter 0 exit modefiy\n");
printf("enter 1 modefiy name\n");
printf("enter 2 modefiy china\n");
printf("enter 3 modefiy english\n");
printf("enter 4 modefiy math\n");
scanf("%d",&choose);
switch(choose)
{
case 1:
printf("please input name:");
scanf("%s",&xname);
break;
case 2:
printf("please input china:");
scanf("%d",&xchina);
break;
case 3:
printf("please input english:");
scanf("%d",&xenglish);
break;
case 4:
printf("please input math:");
scanf("%d",&xmath);
break;
}
while(1){
pointer=pointer->next;
if(pointer->num==key3)
{
if(choose==1)
{ for(i=0;i<256;i++)
{
pointer->name[i]=xname[i];
}
break;
}
else if(choose==2)
{ pointer->china=xchina;
break;}
else if(choose==3)
{ pointer->english=xenglish;
break;
}
else if(choose==4)
{pointer->math=xmath;
break;}
}
}
return head;
}
link delete_chengji(int key2)
{
link pointer;
link back;
pointer=head;
while(1)
{
if(head->num==key2)
{ head=pointer->next;
free(pointer);
break;
}
back=pointer;
pointer=pointer->next;
if(pointer->num==key2)
{
back->next=pointer->next;
free(pointer);
break;}
}
return head;
}
...全文
36 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧