C++文本文件读写的问题,文件的问题,文件一堆烫

llyongzheng 2015-06-27 12:09:45
界面显示可以,但是打开文件出现一些烫,如下:
张三 烫烫烫烫烫烫烫烫烫?  李四 烫烫烫烫烫烫烫烫烫? 〡 ( 王五 烫烫烫烫烫烫烫烫烫? X 刘六 烫烫烫烫烫烫烫烫烫? €慇
实在不懂,因为要做作业,憋了好几天了
#include <iostream>
#include <fstream>
using namespace std;
class Employee{
private:
int number ,age;
char name[20];
double sal;
public:
Employee(){}
Employee(int num,char* Name,int Age, double Salary){
number=num;
strcpy(this->name,Name);
age=Age;
sal=Salary;
}
char * getName(){
return name;
}
void setName(char * name){
strcpy(this->name,name);
}
void addSalary(int sa){
this->sal+=sa;
}
void display(){
cout<<number<<"\t"
<<name<<"\t"
<<age<<"\t"<<sal<<endl;
}
};
int main()
{
ofstream out;
out.open("Employee.txt",ios::out|ios::binary);
Employee e1(1,"张三",23,2320);
Employee e2(2,"李四",32,3210);
Employee e3(3,"王五",34,2220);
Employee e4(4,"刘六",27,1120);
out.write((char*)&e1,sizeof(e1));
out.write((char*)&e2,sizeof(e2));
out.write((char*)&e3,sizeof(e3));
out.write((char*)&e4,sizeof(e4));
Employee e5(3,"王五",40,2220);
out.seekp(2*sizeof(e1));
out.write((char*)&e5,sizeof(e5));
out.close();
ifstream in("Employee.txt",ios::in|ios::binary);
Employee s1;
cout<<"\n-------从文件中读出第3个人的数据-----\n\n";
in.seekg(2*(sizeof(s1)),ios::beg);
in.read((char*)&s1,sizeof(s1));
s1.display();
cout<<"\n---------从文件中读出全部的数据------\n\n";
in.seekg(0,ios::beg);
in.seekg(0,ios::beg);
while(in.read((char*)&s1,sizeof(s1))){
s1.display();



// in.read((char*)&s1,sizeof(s1));
}

/*char xm[10];
cin>>xm;
ifstream in("Employee.dat",ios::in|ios::binary);
Employee s1;

in.read(reinterpret_cast<char*>(&s1),sizeof(s1));
while(!in.eof()){
if(strcmp(s1.getName(),xm)==0){
s1.display();
}
in.read((char*)&s1,sizeof(s1));
}*/
in.close();
system("pause");
}
...全文
600 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
KT永恒国度 2015-09-08
  • 打赏
  • 举报
回复
应该重载write()函数,写一个结构体write函数是二进制写入的,写入的是字符编码,数字的编码编码转换过来就是乱码,除非数字也用字符表示。
ccrun.com 2015-09-08
  • 打赏
  • 举报
回复
为name赋值以前,先用memset(name, 0x0, sizeof(name))清空一下。
魂断冥殇 2015-07-07
  • 打赏
  • 举报
回复
因为你把数字直接当成char类型存入文本,而没经过ASCII转换
xjq2003 2015-07-02
  • 打赏
  • 举报
回复
引用 2 楼 bigfog 的回复:
变量调用前,未初始化,vc默认用 0xCC 来填充了
bigfog 2015-07-01
  • 打赏
  • 举报
回复
变量调用前,未初始化,vc默认用 0xCC 来填充了
jamesyue2008 2015-06-27
  • 打赏
  • 举报
回复
加个函数Trim()试试, 把空格截掉。

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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