我写了一个关于文件读写的程序,里面用到了结构体,要求将结构体内包含信息(姓名、学号..)写入磁盘的文件里,然后可以将文件里的信息读出,读出之后的信息可以修改,查找等等,#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类型的,如果改了,又该怎样读呢?
#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类型的,如果改了,又该怎样读呢?
解决方案 »
- 关于ReadDirectoryChangesW未定义的问题
- 为什么是4525..........
- Access数据库直接在局域网上共享~,多个用户同用ADO进行操作会不会有冲突??
- vc++ 如何区分是本地键盘输入 还是 远程控制或远程桌面的键盘输入
- CMFCPropertyGridProperty能否实现格子上移下移操作?
- 新手求助:如何使用不同函数间的变量?
- 字符串结尾的CRC是什么意思要怎么计算
- MFC变色贪吃龙与变色龙珠(其实就是贪吃蛇)182行代码没用图片.
- 如何调用系统默认的浏览器打开一个网址?
- 好烦的CRichEditCtrl
- 求助:在英文的操作系统下运行的VC程序,界面上的中文变成了乱码,如何解决!谢谢。
- 多任务 多线程 多进程
#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;
}