有木有高手可以帮忙看看,二进制文件写入正常读出乱码。解决办法
有木有高手可以帮忙看看,二进制文件写入正常读出乱码。。
文件写入,数组创建完毕的时候数据正常,在存入文件之后,再取出,前几十个数据没有问题,但之后就全成乱码了这是怎么回事?
以下是程序的代码,有没有高手能帮我看看是怎么回事。。。在下感激不尽。。
#include<iostream>
#include<fstream>
using namespace std;
struct course_info //课程信息
{
short int course_ID; //课程编号
char course[20]; //课程名称
char course_intro[360]; //课程简短介绍
short int credit; //学分
};
int main()
{
//** 创建部分 **//
course_info * course_i_Create = new course_info[200];
for ( int i = 0 ; i < 200 ; i ++ )
{
int ID_temp = 100+rand()%899;
course_i_Create[i].course_ID = ID_temp;
course_i_Create[i].credit = 1+rand()%7;
for ( int j = 0 ; j < 20 ; j ++ )
{
course_i_Create[i].course[j]=NULL;
}
for ( int j = 0 ; j < 360 ; j ++ )
{
course_i_Create[i].course_intro[j] = NULL;
}
for ( int j = 0 ; j < 10 ; j ++ )
{
course_i_Create[i].course[j] = 'a'+rand()%25;
}
for ( int j = 0 ; j < 180 ; j ++ )
{
course_i_Create[i].course_intro[j]='a'+rand()%25;
}
}
ofstream file_Create("d:\\course_info.dat",ios::binary|ios::out);
int j = 0 ; file_Create.seekp(0,ios::beg);
do{
file_Create.write((char*)&course_i_Create[j],sizeof(course_info)); j ++;
}while(j<199);
file_Create.close();
system("pause");
//** 读取部分 **//
course_info * course_i = new course_info [300];
cout<<"Loading..."<<endl;
ifstream file("D:\\course_info.dat",ios::binary|ios::in);
file.seekg(0,ios::beg);
int count = 0;
while (!file.eof())
{
file.read((char*)&course_i[count],sizeof(course_info));
count++;
}
file.close();
cout<<"File Loaded"<<endl;
for (int i = 0 ; i < count ; i ++ )
{
cout<<course_i[i].course<<endl;
cout<<endl;
}
cout<<count<<endl;
system("pause");
}
------解决方案--------------------
while (!file.eof())
{
file.read((char*)&course_i[count],sizeof(course_info));
if(!file.eof()) //加上这句判断下
count++; //count多加了1,
}
文件写入,数组创建完毕的时候数据正常,在存入文件之后,再取出,前几十个数据没有问题,但之后就全成乱码了这是怎么回事?
以下是程序的代码,有没有高手能帮我看看是怎么回事。。。在下感激不尽。。
#include<iostream>
#include<fstream>
using namespace std;
struct course_info //课程信息
{
short int course_ID; //课程编号
char course[20]; //课程名称
char course_intro[360]; //课程简短介绍
short int credit; //学分
};
int main()
{
//** 创建部分 **//
course_info * course_i_Create = new course_info[200];
for ( int i = 0 ; i < 200 ; i ++ )
{
int ID_temp = 100+rand()%899;
course_i_Create[i].course_ID = ID_temp;
course_i_Create[i].credit = 1+rand()%7;
for ( int j = 0 ; j < 20 ; j ++ )
{
course_i_Create[i].course[j]=NULL;
}
for ( int j = 0 ; j < 360 ; j ++ )
{
course_i_Create[i].course_intro[j] = NULL;
}
for ( int j = 0 ; j < 10 ; j ++ )
{
course_i_Create[i].course[j] = 'a'+rand()%25;
}
for ( int j = 0 ; j < 180 ; j ++ )
{
course_i_Create[i].course_intro[j]='a'+rand()%25;
}
}
ofstream file_Create("d:\\course_info.dat",ios::binary|ios::out);
int j = 0 ; file_Create.seekp(0,ios::beg);
do{
file_Create.write((char*)&course_i_Create[j],sizeof(course_info)); j ++;
}while(j<199);
file_Create.close();
system("pause");
//** 读取部分 **//
course_info * course_i = new course_info [300];
cout<<"Loading..."<<endl;
ifstream file("D:\\course_info.dat",ios::binary|ios::in);
file.seekg(0,ios::beg);
int count = 0;
while (!file.eof())
{
file.read((char*)&course_i[count],sizeof(course_info));
count++;
}
file.close();
cout<<"File Loaded"<<endl;
for (int i = 0 ; i < count ; i ++ )
{
cout<<course_i[i].course<<endl;
cout<<endl;
}
cout<<count<<endl;
system("pause");
}
------解决方案--------------------
while (!file.eof())
{
file.read((char*)&course_i[count],sizeof(course_info));
if(!file.eof()) //加上这句判断下
count++; //count多加了1,
}