小白请教 文件怎么导入到未满的C++结构体数组中
本帖最后由 西月 于 2021-7-7 14:27 编辑语言表达不足,直接打代码了,希望有大佬指导
#include<iostream>
#include<fstream>
using namespace std;
struct number
{
string name;
int age;
};
int main()
{
number a = { {"张三",12},{"李四",15} };
ofstream outfile;
outfile.open("a.txt", ios::out | ios::binary);
if (!outfile)
{
cerr << "打开文件失败" << endl;
exit(1);
}
for (int i = 0; i < 2; i++)
outfile.write((char*)&a, sizeof(a));
outfile.close();
ifstream infile;
infile.open("a.txt", ios::in | ios::binary);
if (!infile)
{
cerr << "文件打开失败" << endl;
exit(1);
}
for (int i = 0; i < 5; i++) {
infile.read((char*)&a, sizeof(a));
cout << a.name << '\t' << a.age << endl;
}
}
用VS2019写的,最后运行是这样,有没有办法让它根据本来的文本中的人数来导入数据,比如文本中五个,就全部导入,四个就导入四个。
如果文件中名字数是未知的,有没有办法让它根据文件中de人数来导入相应的数据,因为后面还要再计数到底导入了几个 diaozatian815 发表于 2021-7-7 14:30
第一最简单的再循环输出的地方添加一个判断。
第二那就是拿的时候就判断~!
if(a.age == 0)
那如果有人就是零岁呢?这种情况爱怎么处理呢?
diaozatian815 发表于 2021-7-7 14:43
那就判断名字啊。。。不一定要判断年龄。。。有名字就有年龄。没有就是废值。不展示
判断名字不等于零吗? diaozatian815 发表于 2021-7-7 14:45
0.0...判断名字不等于空不就好了~~!
不等于0就要判断长度
不等于空是什么啊?我只打空格或者打‘’里面加空格都不行{:301_972:},我是不是没救了 diaozatian815 发表于 2021-7-7 14:51
....
if(a.name!="")
或者if(a.name。size()!= 0)
好了,谢谢,非常感谢! 你这个属于设计问题。
1.在最开始存入对象的时候,就应当存入对象的个数,方便后来读取。
2.如果你执意不存入个数,那么后面读取的时候,有个办法就是分行存储对象,这样读取多少行就认为读取了多少个对象。
3.如果你连分行存储也不愿意,那么就只能按照你的方法读取,然后在读取到文件末尾(eof)的时候,判断读入结束。