【问题标题】:c++ read in array struct troublec ++读取数组结构麻烦
【发布时间】:2012-03-17 15:50:59
【问题描述】:

我在将文件从输入读取到数组结构时遇到很多麻烦。这是代码,如果有人可以告诉我我做错了什么,我可以弄清楚。该循环应该读取 2 个字符串和 1 个 int,并跳过可能的空行。但是当我运行它时,它会读取第一组,之后什么也没有读取。

struct Instruments 
{
string model;
string maker;
int year;
};

int main()
{
int size;
Instruments data[20];
int i =0;

ifstream fin;
fin.open("input.txt");

for (i=0; i<20; i++)
{
 do{
getline(fin, data[size].model);
    getline (fin, data[size].maker);
fin >> data[size].year;

    size++;
 }
 while (data[size].model.length() > 0);
 }

fin.close();

for(int i=0;i<size; i++)
{
        cout << data[i].model << "model"<<endl;
        cout << data[i].maker << "maker" << endl;
        cout << data[i].year<< " year" << endl;
}
return 0;
}

【问题讨论】:

标签: c++ multidimensional-array struct


【解决方案1】:

这里有多个问题:

  1. 您的第一个“for”循环使用i 作为循环计数器,但使用size 作为数组索引。

  2. 这次通话后:

    fin &gt;&gt; data[size].year

    它将读取到数字的末尾,并且随后的任何空格都将构成您下一次读取的一部分,因此如果您希望在下一行开始下一条记录,也请在此处执行空白 getline()。

除此之外。

  1. 使用向量而不是数组
  2. 有一个方法可以从流中读取到您的结构中,如果成功,请使用 push_back() 将其添加到您的向量中。

这并不一定意味着您必须循环直到读取失败,可能是您事先知道要读取多少。但你还是应该这样做。

【讨论】:

    【解决方案2】:

    size 变量未初始化。在 C++ 中,变量不会自动初始化。

    您必须添加:

    int size = 0;
    

    【讨论】:

      【解决方案3】:

      这只是一个猜测。除了缺少size 的初始化之外,还有以下内容:

      do{
      .....
      }
      while (data[size].model.length() > 0);
      

      在我看来也很可疑:只要data[size].model 有一些内容(它在第一次阅读后就会这样做,这将评估为true,你可能有一个无限循环。

      如果您正确地制作了for 循环,则不需要do-while 循环。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-19
        • 1970-01-01
        • 1970-01-01
        • 2011-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多