我写了一个关于文件读写的程序,里面用到了结构体,要求将结构体内包含信息(姓名、学号..)写入磁盘的文件里,然后可以将文件里的信息读出,读出之后的信息可以修改,查找等等,#include <iostream>
#include <fstream>
using namespace std;
struct student
{
char name[20];
int num;
int age;
char sex;//分别定义了姓名、学号、年龄、性别
};
int main()
{
student stud[3]={"xia",1001,18,'m',"qu",1002,18,'f',"gao",1003,19,'m'};
ofstream outfile("stu.txt",ios::binary);
if(!outfile)
{
cerr<<"文件读写失败!"<<endl;
abort();
}
for(int i=0;i<3;i++)
outfile.write((char *)&stud[i],sizeof(stud[i]));
outfile.close();
return 0;
}
这是写文件下面是读文件操作#include <iostream>
#include <fstream>
using namespace std;
struct student
{
char name[20];
int num;
int age;
char sex;//分别定义了姓名、学号、年龄、性别
};
int main()
{
student stud[3];
int i;
ifstream infile("stu.txt",ios::binary);
if(!infile)
{
cerr<<"文件无法读取!"<<endl;
abort();}
for(int i=0;i<3;i++)
infile.read((char *)&stud[i],sizeof(stud[i]));
infile.close();
for(i=0;i<3;i++)
{
cout<<"No."<<i+1<<endl;
cout<<"name"<<stud[i].name<<endl;
cout<<"num"<<stud[i].num<<endl;
cout<<"age"<<stud[i].age<<endl;
cout<<"sex"<<stud[i].sex<<end;
}
return 0;
}可是读出来的除去第一个学生的信息外全是乱码,而且写的文件stu.txt也有乱码!该怎么办啊,是不是因为是二进制读写的原因啊?可不可以将姓名name改成string类型的,如果改了,又该怎样读呢?

解决方案 »

  1.   

    读文件操作代码有错误,不好意思,这是正确的代码#include <iostream>
    #include <fstream>
    using namespace std;
    struct student
    {
    char name[20];
    int num;
    int age;
    char sex;//分别定义了姓名、学号、年龄、性别
    };
    int main()
    {
    student stud[3];
    int i;
    ifstream infile("stu.txt",ios::binary);
    if(!infile)
    {
    cerr<<"文件无法读取!"<<endl;
    abort();}
    for(i=0;i<3;i++)
    infile.read((char *)&stud[i],sizeof(stud[i]));
    infile.close();
    for(i=0;i<3;i++)
    {
    cout<<"No."<<i+1<<endl;
    cout<<"name"<<stud[i].name<<endl;
    cout<<"num"<<stud[i].num<<endl;
    cout<<"age"<<stud[i].age<<endl;
    cout<<"sex"<<stud[i].sex<<endl;
    }
    return 0;
    }