为什么读不出来文件?在线等

power19994894 2006-04-16 05:43:46
下面这个程序第一个main()可以写文件,为什么第二个main()不能读文件

#include "stdio.h"
#include <string>
#include <iostream>
using namespace std;

#define MAX 10

typedef struct lei
{
int x;
char s[MAX];
}lei;

void main()//写文件
{
lei *p;
p=(lei*)malloc(sizeof(lei));
p->x=1;
strcpy(p->s,"张三");
FILE *fp;
fp=fopen("data.txt","a");
fwrite(p,sizeof(lei),1,fp);
free(p);
fclose(fp);
}

/*
void main()//读文件
{
FILE *fp;
lei *p;
fp=fopen("data,txt","r");
p=(lei*)malloc(sizeof(lei));
fread(p,10*sizeof(char),1,fp);
cout<<p->s<<endl;
cout<<p->x<<endl;
free(p);
fclose(fp);
}*/
...全文
275 15 点赞 打赏 收藏 举报
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
power19994894 2006-04-16
大哥,下线了啊?
  • 打赏
  • 举报
回复
power19994894 2006-04-16
哦,我晓得了,可是你能给我讲讲那个汉字怎么存,才不会出现我上面问的问题吗?
  • 打赏
  • 举报
回复
ma100 2006-04-16
没有?
  • 打赏
  • 举报
回复
power19994894 2006-04-16
上面那个程序load()函数,最后的fclose(fp)拷掉了。
  • 打赏
  • 举报
回复
power19994894 2006-04-16
没有啊,第一次我写进去是0,load(athlete *x)是我用来将文件中的数据导入到链表中。
  • 打赏
  • 举报
回复
ma100 2006-04-16
load(athlete *x)是干什么的
不管是不是增加记录 count都+1了
  • 打赏
  • 举报
回复
power19994894 2006-04-16
我在调试下面这段程序时,发现将字符串存进内存时有问题,麻烦你看下。
我在VC里看它是这样存的
id----0x00491fa"2003131236张三"
name--0x00491fg"张三"
--[0]"-43"
--[1]"-59"
--[2]"-63"
........
由于这样存,导致我下一次导入出问题,还往指教。

#include "stdio.h"
#include "malloc.h"
#include <string>
#include <iostream>
using namespace std;

enum project{jump_far,jump_high,race_100m,race_1000m};/*比赛项目*/

typedef struct sportman
{
char id[10];//学号
char name[10];//姓名
int classname;//班级名称
int code;//参赛号码
project pj;//比赛项目
int score;//比赛成绩
int grade;//名次
struct sportman *next;
}athlete;


int load(athlete *x)/*载入函数*/
{
FILE *fpcount,*fp;
athlete *p,*q;
int count;
int i;
fpcount=fopen("count.txt","r+");
if(!fpcount)
{
fpcount=fopen("count.txt","w+");
count=0;
fwrite(&count,sizeof(int),1,fpcount);
}
else
{
fread(&count,sizeof(int),1,fpcount);
count++;
rewind(fpcount);
fwrite(&count,sizeof(int),1,fpcount);
}
fclose(fpcount);

if(count>0)
{
fp=fopen("data.txt","r");
p=x;
for(i=0;i<count;i++)
{
fread(p,sizeof(athlete),1,fp);
q=p;
p=(athlete*)malloc(sizeof(athlete));
p->next=q;
q->next=p;
}
free(p);
return 1;
}
return 0;
}


void input(athlete *x,int first)/*输入函数*/
{
FILE *fp;
int flagpj;
char flag;
project pro;
athlete *p,*q;
if(first==0)
{
fp=fopen("data.txt","w");
p=x;
cout<<"学号(eg.2003131201):";cin>>p->id;
cout<<"姓名(eg.张三):";cin>>p->name;
cout<<"班级(eg.1~9):";cin>>p->classname;
cout<<"参赛号码(1~100):";cin>>p->code;
cout<<"比赛项目:"<<endl;
cout<<"1.跳远2.跳高3.100米4.1000米"<<endl;
cout<<"请选择:";
cin>>flagpj;
switch(flagpj)
{
case 1:
pro=jump_far;break;
case 2:
pro=jump_high;break;
case 3:
pro=race_100m;break;
case 4:
pro=race_1000m;break;
default:
pro=jump_high;break;
}
p->pj=pro;
cout<<"比赛成绩:";cin>>p->score;
cout<<"比赛名次:";cin>>p->grade;
cout<<"继续吗(y/n)?";
cin>>flag;
fwrite(p,sizeof(athlete),1,fp);
if(flag=='n')
return;
q=p;
while(flag=='y')
{
p=(athlete*)malloc(sizeof(athlete));
cout<<"学号(eg.2003131201):";cin>>p->id;
cout<<"姓名(eg.张三):";cin>>p->name;
cout<<"班级(eg.1~9):";cin>>p->classname;
cout<<"参赛号码(1~100):";cin>>p->code;
cout<<"比赛项目:"<<endl;
cout<<"1.跳远2.跳高3.100米4.1000米"<<endl;
cout<<"请选择:";
cin>>flagpj;
switch(flagpj)
{
case 1:
pro=jump_far;break;
case 2:
pro=jump_high;break;
case 3:
pro=race_100m;break;
case 4:
pro=race_1000m;break;
default:
pro=jump_high;break;
}
p->pj=pro;
cout<<"比赛成绩:";cin>>p->score;
cout<<"比赛名次:";cin>>p->grade;
fwrite(p,sizeof(athlete),1,fp);
p->next=q->next;/*将输入的接点链接到链表上*/
q->next=p;
q=p;
cout<<"继续吗(y/n)?";
cin>>flag;
}
fclose(fp);
}//if
else
{
fp=fopen("data.txt","a");
q=x;
while(q->next!=NULL)
q=q->next;/*找到链表最后一个接点*/
do
{
p=(athlete*)malloc(sizeof(athlete));
cout<<"学号(eg.2003131201):";cin>>p->id;
cout<<"姓名(eg.张三):";cin>>p->name;
cout<<"班级(eg.1~9):";cin>>p->classname;
cout<<"参赛号码(1~100):";cin>>p->code;
cout<<"比赛项目:"<<endl;
cout<<"1.跳远2.跳高3.100米4.1000米"<<endl;
cout<<"请选择:";
cin>>flagpj;
switch(flagpj)
{
case 1:
pro=jump_far;break;
case 2:
pro=jump_high;break;
case 3:
pro=race_100m;break;
case 4:
pro=race_1000m;break;
default:
pro=jump_high;break;
}
p->pj=pro;
cout<<"比赛成绩:";cin>>p->score;
cout<<"比赛名次:";cin>>p->grade;
fwrite(p,sizeof(athlete),1,fp);
p->next=q->next;/*将输入的接点链接到链表上*/
q->next=p;
q=p;
cout<<"继续吗(y/n)?";
cin>>flag;
}while(flag=='n');
fclose(fp);
}

}


void select(athlete *x,int op)/*查询函数*/
{
cout<<"【 学号 】"<<"【 姓名 】"<<"【班级】"<<"【参赛号码】"<<"【比赛项目】"<<"【比赛成绩】"<<"【比赛名次】"<<endl;
}


void show(athlete *x)/*打印函数*/
{
cout<<x->id
<<x->name
<<x->classname
<<x->code
<<x->pj
<<x->score
<<x->grade
<<endl;
}

void del(athlete *x)/*删除函数*/
{
athlete *p,*q;
p=x;
while(p!=NULL)
{
q=p;
p=q->next;
free(q);
}
}

void main()
{
athlete *x;
int first;
int option,op;
int count=1;
x=(athlete*)malloc(sizeof(athlete));
x->next=NULL;
first=load(x);
cout<<"*********************************************************************"<<endl;
cout<<"**** 欢迎进入运动员录入查询系统! ****"<<endl;
cout<<"*********************************************************************"<<endl;
cout<<" version:1.0 "<<endl;
cout<<"*********************************************************************"<<endl;
do
{
cout<<"请选择您的操作:0.退出1.查询记录2.增加记录";
cin>>option;
//getchar();
if(option==1)
{
/*
cout<<"1.按姓名查询\n2."
select(x,op);
*/
athlete *p;
p=x;
while(p!=NULL)
{
show(p);
p=p->next;
}
}
else
if(option==2)
{
input(x,first);
}
else
if(option==0)
{
break;
}
else
{
cout<<"您选择的操作有误!"<<endl;
}
}while(option!=0);
del(x);
}
  • 打赏
  • 举报
回复
ma100 2006-04-16
int main(void)
{
FILE *fpcount;
int count;
fpcount=fopen("count.txt","r+");
if(!fpcount)
{
fpcount = fopen ( "count.txt" , "w+" );
count=0;
fwrite(&count,sizeof(int),1,fpcount);
}
else
{
fread(&count,sizeof(int),1,fpcount);
count++;
fseek ( fp , -sizeof(int) , SEEK_CUR );
fwrite(&count,sizeof(int),1,fpcount);
}
fclose(fpcount);
return 0;
}
  • 打赏
  • 举报
回复
power19994894 2006-04-16
void main()
{
FILE *fpcount;
int count;
fpcount=fopen("count.txt","?");/*请问fopen的第二个参数我用什么才能判断文件是否存在,如果不存在,我就写进去0,如果存在,我就把它读出来,并把它的值加1后再存进去。我怎么试都不行。*/
if(!fpcount)
{
count=0;
fprintf(fpcount,"%d",count);
}
else
{
fscanf(fpcount,"%d",&count);
count++;
fprintf(fpcount,"%d",count);
}
fclose(fpcount);
}
  • 打赏
  • 举报
回复
chenhu_doc 2006-04-16
恩,等待中, 对于上面ma100()的解答好象自己可以在错误信息里面看到的哦··
自己多考虑考虑
  • 打赏
  • 举报
回复
power19994894 2006-04-16
不好意思哦,我看错了,我在写一个文件程序,上面是我在测试这些函数的调用,如果等会还有什么问题的话,还请各位能够指教。
  • 打赏
  • 举报
回复
sharpdew 2006-04-16
ma100说的没错,楼顶的同学应该细心一点啦!
  • 打赏
  • 举报
回复
ma100 2006-04-16
data,txt

data.txt
  • 打赏
  • 举报
回复
power19994894 2006-04-16
哦,我写错了,是fread(p,sizeof(lei),1,fp);但还是读不出
  • 打赏
  • 举报
回复
ma100 2006-04-16
p=(lei*)malloc(sizeof(lei));//申请1字节
fread(p,10*sizeof(char),1,fp);//使用10字节
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.5w+

社区成员

C语言相关问题讨论
申请成为版主
帖子事件
创建了帖子
2006-04-16 05:43
社区公告
暂无公告