西月 发表于 2021-7-7 14:14

小白请教 文件怎么导入到未满的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

西月 发表于 2021-7-7 14:42

diaozatian815 发表于 2021-7-7 14:30
第一最简单的再循环输出的地方添加一个判断。
第二那就是拿的时候就判断~!
if(a.age == 0)


那如果有人就是零岁呢?这种情况爱怎么处理呢?

diaozatian815 发表于 2021-7-7 14:43

西月 发表于 2021-7-7 14:45

diaozatian815 发表于 2021-7-7 14:43
那就判断名字啊。。。不一定要判断年龄。。。有名字就有年龄。没有就是废值。不展示

判断名字不等于零吗?

diaozatian815 发表于 2021-7-7 14:45

西月 发表于 2021-7-7 14:49

diaozatian815 发表于 2021-7-7 14:45
0.0...判断名字不等于空不就好了~~!
不等于0就要判断长度

不等于空是什么啊?我只打空格或者打‘’里面加空格都不行{:301_972:},我是不是没救了

diaozatian815 发表于 2021-7-7 14:51

西月 发表于 2021-7-7 14:53

diaozatian815 发表于 2021-7-7 14:51
....
if(a.name!="")
或者if(a.name。size()!= 0)

好了,谢谢,非常感谢!

autumoon 发表于 2021-7-7 15:01

你这个属于设计问题。
1.在最开始存入对象的时候,就应当存入对象的个数,方便后来读取。
2.如果你执意不存入个数,那么后面读取的时候,有个办法就是分行存储对象,这样读取多少行就认为读取了多少个对象。
3.如果你连分行存储也不愿意,那么就只能按照你的方法读取,然后在读取到文件末尾(eof)的时候,判断读入结束。
页: [1] 2 3
查看完整版本: 小白请教 文件怎么导入到未满的C++结构体数组中