C++ 无限循环将文件读入数组

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);

我在尝试读取文件时有一个无限循环。文件从用户输入保存,然后读取,最后使用单独的函数显示

这是我的read函数。循环未找到eof();从文件中。我看不出有什么问题。没有编译器错误

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;icout您的问题是
而(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,同意。请随意将这些行添加到您的答案中。这解决了无限循环。谢谢提示。完全有意义。删除了一个循环。