C++输入流与输出流问题

//下面的代码是建立职工记录的二进制文件f#include<iostream>#include<fstream>usingnamespacestd;structemplo... //下面的代码是建立职工记录的二进制文件f
#include <iostream>
#include<fstream>
using namespace std;
struct employee
{char number[6];
char name[20];
char telephone[9];
char addnum[7];
char address[30];
};

int main()
{ char filename[30]; int i,n;
struct employee Emp;
fstream intxt;
cout<<"input filename ";cin>>filename;
intxt.open(filename,ios::out|ios::binary);
if(!intxt)
{cerr<<"couldn't be opened!"<<endl;
abort();
}
cout<<"输入职工人数: ";cin>>n;
for(i=1;i<=n;i++)
{cout<<"输入第"<<i<<"个职工的"<<endl;
cout<<"编号 ";cin>>Emp.number;
cout<<"姓名 ";cin>>Emp.name;
cout<<"电话 ";cin>>Emp.telephone;
cout<<"邮编 ";cin>>Emp.number;
cout<<"地址 ";cin>>Emp.address;
intxt.write( ( char* )& Emp,sizeof(employee));
}
intxt.close();
}

//下面的程序读上面建立的文件,输入职工的编号进行查询
#include <iostream>
#include<fstream>
using namespace std;
struct employee
{char number[10];
char name[20];
char telephone[10];
char addnum[10];
char address[50];
};

int main()
{ char filename[30];
int i;char num[10];
employee Emp;
fstream outtxt;
cout<<"input filename ";cin>>filename;
outtxt.open(filename,ios::in|ios::binary);
if(!outtxt)
{cerr<<"couldn't be opened!";
abort();
}
cout<<"输入职工编号: ";cin>>num;
outtxt.seekg(0,ios::end);
long pos=outtxt.tellp();
outtxt.seekg(0,ios::beg);
do
{outtxt.read((char*)&Emp,sizeof(employee));
if(strcmp(Emp.number,num)==0)
{cout<<"找到! ";
cout<<"\n编号 "<<Emp.number;
cout<<"\n姓名 "<<Emp.name;
cout<<"\n电话 "<<Emp.telephone;
cout<<"\n邮编 "<<Emp.number;
cout<<"\n地址 "<<Emp.address;
return 1;
}
}while(long(outtxt.tellp())!=pos);
cout<<"找不到!";
}

//?????为什么输出结果是下面这样子的?问题出在哪里呢??

input filename d:\\nin.dat
输入职工编号: 01
找到!
编号 01
姓名
电话 烫烫?23
邮编 01
地址 烫烫烫烫烫烫烫烫烫烫烫02
展开
 我来答
谢应宸
推荐于2016-06-09 · TA获得超过2640个赞
知道大有可为答主
回答量:2731
采纳率:66%
帮助的人:2145万
展开全部
首先,你的录入程序中
cout<<"编号 ";cin>>Emp.number;
cout<<"姓名 ";cin>>Emp.name;
cout<<"电话 ";cin>>Emp.telephone;
cout<<"邮编 ";cin>>Emp.number;
cout<<"地址 ";cin>>Emp.address;
邮编怎么跟编号用了同样的成员名称?修改如下,调试通过。

//下面的代码是建立职工记录的二进制文件f
#include <iostream>
#include<fstream>
using namespace std;
struct employee
{char number[6];
char name[20];
char telephone[9];
char addnum[7];
char address[30];
};

int main()
{ char filename[30]; int i,n;
struct employee Emp;
fstream intxt;
cout<<"input filename ";cin>>filename;
intxt.open(filename,ios::out|ios::binary);
if(!intxt)
{cerr<<"couldn't be opened!"<<endl;
abort();
}
cout<<"输入职工人数: ";cin>>n;
for(i=1;i<=n;i++)
{cout<<"输入第"<<i<<"个职工的"<<endl;
cout<<"编号 ";cin>>Emp.number;
cout<<"姓名 ";cin>>Emp.name;
cout<<"电话 ";cin>>Emp.telephone;
cout<<"邮编 ";cin>>Emp.addnum;
cout<<"地址 ";cin>>Emp.address;
intxt.write( ( char* )& Emp,sizeof(employee));
}
intxt.close();
}

#include <iostream>
#include<fstream>
using namespace std;
struct employee
{char number[6];
char name[20];
char telephone[9];
char addnum[7];
char address[30];
};
int main()
{ char filename[30];
int i;char num[10];
employee Emp;
fstream outtxt;
cout<<"input filename ";cin>>filename;
outtxt.open(filename,ios::in|ios::binary);
if(!outtxt)
{cerr<<"couldn't be opened!";
abort();
}
cout<<"输入职工编号: ";cin>>num;
outtxt.seekg(0,ios::end);
long pos=outtxt.tellp();
outtxt.seekg(0,ios::beg);
do
{outtxt.read((char*)&Emp,sizeof(employee));
if(strcmp(Emp.number,num)==0)
{cout<<"找到! ";
cout<<"\n编号 "<<Emp.number;
cout<<"\n姓名 "<<Emp.name;
cout<<"\n电话 "<<Emp.telephone;
cout<<"\n邮编 "<<Emp.number;
cout<<"\n地址 "<<Emp.address;
return 1;
}
}while(long(outtxt.tellp())!=pos);
cout<<"找不到!";
}

第二你的查询程序中的结构体应该与录入程序的结构体保持一致
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式