有问题的代码是......
include <iostream>
#include <fstream>
using namespace std;
...
Void InventoryData::loadArrays()
{
ifstream partIn;
partIn.open("inventoryPricing.dat");
if (partIn.is_open())
{
//Prime Read
partIn >> partNum[invCount]
>> price[invCount];
while(!partIn.eof())
{
invCount++;
partIn >> partNum[invCount]
>> price[invCount];
} //END While
partIn.close();
} //END IF*/
else
{
invCount = -1;
cout<<"File failed to open."<<endl;
}
}
当我注释掉if语句时,一切都很好,我得到“文件未能打开”语句没问题,但如果它试图打开它只是一个空白屏幕?不知道从哪里开始看,一双更明智的眼睛能引导我走上正确的道路吗?
编辑:在听完一些建议之后,我在每个循环下面添加了一条cout线。它现在返回每个文件,但也返回一个。 最重要的是,通过这个新的添加,文件现在继续进入以前没有的其他代码行?
答案 0 :(得分:1)
它现在返回每个文件,但还有一个。
您的代码未正确测试eof()
。您应该测试输入操作是否成功,除非您已经输入失败,否则几乎不会eof()
。正确的代码是:
if (ifstream partIn("inventoryPricing.dat"))
{
invCount = 0;
while (partIn >> partNum[invCount] >> price[invCount])
++invCount;
if (partIn.fail())
{
// could set invCount to -1 to avoid partial processing?
std::cerr << "File parsing failed after " << invCount << " entries\n";
}
}
else
{
invCount = -1;
std::cerr << "File failed to open.\n";
}
最重要的是,通过这个新增功能,该文件现在继续进入以前没有的其他代码行?
我甚至猜不出你的意思......