在C ++中从文本加载并行数组时遇到问题

时间:2014-04-04 00:15:02

标签: c++

抱歉,如果这个问题有重复,我只看到有人在C中问这个问题。 我正在尝试使用外部数据文件中的数据加载并行数组,但是当文件打开并开始加载时,我在输出中得到的只是一个空白控制台。

有问题的代码是......

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线。它现在返回每个文件,但也返回一个。 最重要的是,通过这个新的添加,文件现在继续进入以前没有的其他代码行?

1 个答案:

答案 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";
}
  

最重要的是,通过这个新增功能,该文件现在继续进入以前没有的其他代码行?

我甚至猜不出你的意思......