我在输入到数组结构中的文件中遇到了很多麻烦。这里是代码,如果有人可以告诉我我做错了什么我可以搞清楚。循环应该是读取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;
}
答案 0 :(得分:1)
size
变量未初始化。在C ++中,变量不会自动初始化。
您必须添加:
int size = 0;
答案 1 :(得分:1)
这里有多个问题:
您的第一个'for'循环使用i
作为循环计数器,但使用size
作为数组索引。
此次通话后:
fin >> data[size].year
它将读到数字的末尾,后面的任何空格都将构成您下次读取的一部分,因此如果您希望在下一行开始下一条记录,请在此处执行空白的getline()。 / p>
除此之外。
这并不一定意味着你必须循环直到读取失败,这可能是你事先知道你想读多少。但是你仍然应该这样做。
答案 2 :(得分:0)
这只是猜测。除了缺少size
的初始化之外,还有以下内容:
do{
.....
}
while (data[size].model.length() > 0);
对我来说也很可疑:只要data[size].model
有一些内容(在第一次阅读后就会这样做,这将评估为true
,你可能会有一个无限循环。
如果正确制作for
循环,则不需要do-while
循环。