C++ 无限循环将文件读入数组
我在尝试读取文件时有一个无限循环。文件从用户输入保存,然后读取,最后使用单独的函数显示 这是我的read函数。循环未找到eof();从文件中。我看不出有什么问题。没有编译器错误C++ 无限循环将文件读入数组,c++,infinite-loop,fstream,C++,Infinite Loop,Fstream,我在尝试读取文件时有一个无限循环。文件从用户输入保存,然后读取,最后使用单独的函数显示 这是我的read函数。循环未找到eof();从文件中。我看不出有什么问题。没有编译器错误 void read(HouseholdItems items[AMOUNT], fstream& myFile, fstream& yourFile) { myFile.open("insured.dat", ios::in | ios::binary);
void read(HouseholdItems items[AMOUNT], fstream& myFile, fstream& yourFile)
{
myFile.open("insured.dat", ios::in | ios::binary); // Open myFile
yourFile.open("uninsured.dat", ios::in | ios::binary); // Open yourFile
for(int i = 0; i < AMOUNT; i++)
{
myFile.read(reinterpret_cast <char*>(&items[i]),sizeof(&items[i]));
yourFile.read(reinterpret_cast <char*>(&items[i]),sizeof(&items[i]));
for(i = 0; i < AMOUNT; i++)
{
while (myFile)
{
cout << "description: ";
cout << items[i].description << endl;
cout << "quantity: ";
cout << items[i].quantity << endl;
cout << "price: ";
cout << items[i].price << endl;
cout << "insured: ";
cout << items[i].insured << endl;
}
}
}
myFile.close();
yourFile.close();
}
void read(HouseholdItems项目[金额]、fstream和myFile、fstream和yourFile)
{
myFile.open(“insured.dat”,ios::in | ios::binary);//打开myFile
yourFile.open(“uninsured.dat”,ios::in | ios::binary);//打开您的文件
对于(int i=0;i cout您的问题是而(myFile)
,因为myFile
在该循环中没有任何变化。不清楚该循环要完成什么,所以我不能说用什么来替换它。(您为循环嵌套了,但似乎没有数据表,这似乎有问题。)以下循环永远不会结束:不会对其主体内的myFile
进行任何修改:
while (myFile)
{
cout << "description: ";
cout << items[i].description << endl;
cout << "quantity: ";
cout << items[i].quantity << endl;
cout << "price: ";
cout << items[i].price << endl;
cout << "insured: ";
cout << items[i].insured << endl;
}
while(myFile)
{
@ScottHunter和@Ekelog的答案已经回答了真正的问题。以下是外围问题
这些行是不对的:
myFile.read(reinterpret_cast <char*>(&items[i]),sizeof(&items[i]));
yourFile.read(reinterpret_cast <char*>(&items[i]),sizeof(&items[i]));
myFile.read(重新解释cast(&items[i])、sizeof(&items[i]);
read(reinterpret_cast(&items[i])、sizeof(&items[i]);
您需要使用:
myFile.read(reinterpret_cast <char*>(&items[i]),sizeof(items[i]));
// ^^ Drop the &
yourFile.read(reinterpret_cast <char*>(&items[i]),sizeof(items[i]));
// ^^ Drop the &
myFile.read(重新解释cast(&items[i])、sizeof(items[i]);
//^^^放下&
read(reinterpret_cast(&items[i])、sizeof(items[i]);
//^^^放下&
请稍后再试
while(!myFile.eof())
{
参见内联注释:
void read(HouseholdItems items[AMOUNT], fstream& myFile, fstream& yourFile)
{
// since you open and close those files here, you probably
// want to declare them here instead as a function parameter
myFile.open("insured.dat", ios::in | ios::binary); // Open myFile
yourFile.open("uninsured.dat", ios::in | ios::binary); // Open yourFile
// test in the loop
for(int i = 0; i < AMOUNT && myFile && yourFile; i++)
{
// these two reads do not make sense, the second one
// will overwrite the data just read by the first one...
// maybe you meant that one of the file might be smaller?
// or maybe to compare the results in some ways (in which
// case you need two arrays)
myFile.read(reinterpret_cast <char*>(&items[i]),sizeof(items[i]));
yourFile.read(reinterpret_cast <char*>(&items[i]),sizeof(items[i]));
// write current result
cout << "description: ";
cout << items[i].description << endl;
cout << "quantity: ";
cout << items[i].quantity << endl;
cout << "price: ";
cout << items[i].price << endl;
cout << "insured: ";
cout << items[i].insured << endl;
}
myFile.close();
yourFile.close();
}
void read(HouseholdItems项目[金额]、fstream和myFile、fstream和yourFile)
{
//既然您在这里打开和关闭这些文件,您可能
//要在此处将它们声明为函数参数吗
myFile.open(“insured.dat”,ios::in | ios::binary);//打开myFile
yourFile.open(“uninsured.dat”,ios::in | ios::binary);//打开您的文件
//循环测试
对于(int i=0;i 可能循环没有找到EOF,因为它甚至没有找到它。我尝试使用EOF();同样的问题,从我读到的内容来看,你不必使用EOF();它会自动查找。这不是真的吗?“sizeof(&items[I])绝对是错的为什么你对同一个变量(I)有一个比外部更适合?@SamIam,假设MyFile是一个ifstreamAs true,那么它不会处理无限循环。@ScottHunter,同意。请随意将这些行添加到您的答案中。这解决了无限循环。谢谢提示。完全有意义。删除了一个循环。