c ++读入数组结构问题

时间:2012-02-28 06:32:24

标签: c++ multidimensional-array struct

我在输入到数组结构中的文件中遇到了很多麻烦。这里是代码,如果有人可以告诉我我做错了什么我可以搞清楚。循环应该是读取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;
}

3 个答案:

答案 0 :(得分:1)

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

您必须添加:

int size = 0;

答案 1 :(得分:1)

这里有多个问题:

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

  2. 此次通话后:

    fin >> data[size].year

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

  3. 除此之外。

    1. 使用向量而非数组
    2. 有一个方法可以从流中读取结构,如果成功,可以使用push_back()将其添加到向量中。
    3. 这并不一定意味着你必须循环直到读取失败,这可能是你事先知道你想读多少。但是你仍然应该这样做。

答案 2 :(得分:0)

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

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

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

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