請各路英雄好漢來幫忙!!!!!!

wangcftxz 2010-09-21 10:14:15
請哪位高手指點一下,爲什麽我的二進制保存的dat文件里沒有內容,用寫字板打開成這樣:
编号:?姓名:?體重:?
還有,怎樣將我存好的文本文件和二進制文件再用TSream流打開,我剛學C++,菜鳥,請各路英雄好漢來幫忙!!!!!!


//---------------------------------------------------------------------------

#pragma hdrstop
#include <malloc.h>
#include <stdio.h>
#include <iostream.h>
#include <fstream.h>
using namespace std;
#define NULL 0
#define LEN sizeof(struct Employe)
//---------------------------------------------------------------------------

#pragma argsused

struct Employe
{
int mi_number;
char mc_name[20];
int mi_weight;
int mi_height;
char mc_birth[20];
char mc_address[50];
struct Employe *Next;
};

struct Employe *head, *end, *p;

int main(int argc, char* argv[])
{
char mc_txtname[30],mc_binname[30];
fstream txtfile,binfile;
head=end=p=(struct Employe*)malloc(LEN);
cout<<endl;
cout<<" 输入员工编号为0结束输入,每项信息都必须输入内容。"<<endl;
cout<<endl<<endl;
cout<<"请输入文本文件路径及后缀名:"; //如 F:\\txtname.txt
cin>>mc_txtname;
txtfile.open(mc_txtname,ios::out|ios::trunc);
cout<<"请输入二进制文件路径及后缀名:"; //如 F:\\binname.dat
cin>>mc_binname;
binfile.open(mc_binname,ios::binary|ios::out|ios::trunc);

do
{
cout<<endl<<"编号:";
cin>>p->mi_number;
if((p->mi_number)==0) {end->Next=NULL; break;}
cout<<"姓名:";
cin>>p->mc_name;
cout<<"体重:";
cin>>p->mi_weight;
cout<<"身高:";
cin>>p->mi_height;
cout<<"生日:";
cin>>p->mc_birth;
cout<<"地址:";
cin>>p->mc_address;
cout<<endl;


txtfile<<"编号:"<<p->mi_number<<endl; //文本格式
txtfile<<"姓名:"<<p->mc_name<<endl;
txtfile<<"体重:"<<p->mi_weight<<endl;
txtfile<<"身高:"<<p->mi_height<<endl;
txtfile<<"生日:"<<p->mc_birth<<endl;
txtfile<<"地址: "<<p->mc_address<<endl<<endl;


binfile.write("编号:",8*sizeof(char)); //二進制格式
binfile.write((char *)&(p->mi_number),sizeof(int));
binfile.write("姓名:",8*sizeof(char));
binfile.write(p->mc_name,20*sizeof(char));
binfile.write("体重:",8*sizeof(char));
binfile.write((char *)&(p->mi_weight),sizeof(int));
binfile.write("身高:",8*sizeof(char));
binfile.write((char *)&(p->mi_height),sizeof(int));
binfile.write("生日:",8*sizeof(char));
binfile.write(p->mc_birth,20*sizeof(char));
binfile.write("地址:",8*sizeof(char));
binfile.write(p->mc_address,50*sizeof(char));

end->Next=p;
p=(struct Employe *)malloc(LEN);
}while(1);
system("pause");
}
...全文
74 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dingshaofengbinbin 2010-09-21
  • 打赏
  • 举报
回复
顶个!!!
job82824 2010-09-21
  • 打赏
  • 举报
回复
写个代码这么长的还不会对齐,看着真累。代码没问题,能够正确写入数据到txt和bat文件。二进制文件必须用二进制方式来读取。
//---------------------------------------------------------------------------

#pragma hdrstop
#include <malloc.h>
#include <stdio.h>
#include <iostream.h>
#include <fstream.h>
using namespace std;
#define NULL 0
#define LEN sizeof(struct Employe)
//---------------------------------------------------------------------------

#pragma argsused

struct Employe
{
int mi_number;
char mc_name[20];
int mi_weight;
int mi_height;
char mc_birth[20];
char mc_address[50];
struct Employe *Next;
};

struct Employe *head, *end, *p;

int main(int argc, char* argv[])
{
char mc_txtname[30],mc_binname[30];
fstream txtfile,binfile;
head=end=p=(struct Employe*)malloc(LEN);
cout<<endl;
cout<<" 输入员工编号为0结束输入,每项信息都必须输入内容。"<<endl;
cout<<endl<<endl;
cout<<"请输入文本文件路径及后缀名:"; //如 F:\\txtname.txt
cin>>mc_txtname;
txtfile.open(mc_txtname,ios::out|ios::trunc);
cout<<"请输入二进制文件路径及后缀名:"; //如 F:\\binname.dat
cin>>mc_binname;
binfile.open(mc_binname,ios::binary|ios::out|ios::trunc);

do
{
cout<<endl<<"编号:";
cin>>p->mi_number;
if((p->mi_number)==0) {end->Next=NULL; break;}
cout<<"姓名:";
cin>>p->mc_name;
cout<<"体重:";
cin>>p->mi_weight;
cout<<"身高:";
cin>>p->mi_height;
cout<<"生日:";
cin>>p->mc_birth;
cout<<"地址:";
cin>>p->mc_address;
cout<<endl;


txtfile<<"编号:"<<p->mi_number<<endl; //文本格式
txtfile<<"姓名:"<<p->mc_name<<endl;
txtfile<<"体重:"<<p->mi_weight<<endl;
txtfile<<"身高:"<<p->mi_height<<endl;
txtfile<<"生日:"<<p->mc_birth<<endl;
txtfile<<"地址: "<<p->mc_address<<endl<<endl;


binfile.write("编号:",8*sizeof(char)); //二進制格式
binfile.write((char *)&(p->mi_number),sizeof(int));
binfile.write("姓名:",8*sizeof(char));
binfile.write(p->mc_name,20*sizeof(char));
binfile.write("体重:",8*sizeof(char));
binfile.write((char *)&(p->mi_weight),sizeof(int));
binfile.write("身高:",8*sizeof(char));
binfile.write((char *)&(p->mi_height),sizeof(int));
binfile.write("生日:",8*sizeof(char));
binfile.write(p->mc_birth,20*sizeof(char));
binfile.write("地址:",8*sizeof(char));
binfile.write(p->mc_address,50*sizeof(char));

end->Next=p;
p=(struct Employe *)malloc(LEN);
}while(1);
system("pause");
}



只要把这一行改一下就可以读了
binfile.open(mc_binname,ios::binary|ios::out|ios::trunc);//out改为in,然后来读文件
没钱吃饭 2010-09-21
  • 打赏
  • 举报
回复
你用二进制写入,用写字板打开当然有乱码
Q446512799 2010-09-21
  • 打赏
  • 举报
回复
能保存然后能正常读取就可以啦0_0
乐CC 2010-09-21
  • 打赏
  • 举报
回复
你用二进制写入,用写字板打开当然有乱码

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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