从输入文件到数组的混乱读取

messy reading from input file into array

本文关键字:混乱 读取 数组 输入 文件      更新时间:2023-10-16

我已经在这方面工作了很长时间,所以我认为是时候问一个问题了,因为我不知道发生了什么。无论出于什么原因,在这个循环中,它只在第一次正常工作,然后返回到文件的开头,重新开始从头开始读取。谢谢

void readGasFile(int numTherms, int arrSize, string fileName, Customer cArray[])
 {
    cout << "reading gas file";
    int i;
    string temp;
    int temp2;
    ifstream inputFile;
    inputFile.open(fileName.c_str());
    if (inputFile.is_open())
    {
        cout << "reading input file";
        string dummyLine;
        getline(inputFile, dummyLine);
        //ignore first line
        /* *****************************************
        format:
        1212 <--- account number
        Lance, Ahmed
        1200  1212  <----- previous, current therms meter readings
        2323        <----- gas therms used
        ******************************************/
        for(i=0; i<arrSize; ++i)
        {
            cout << "start loop" << i << endl;
            inputFile >> temp2;
            cArray[i].setNumber(temp2);
            cout << temp2 << endl;;
            inputFile >> temp;
            cArray[i].setLastName(temp);
            inputFile >> temp;
            cArray[i].setFirstName(temp);
            inputFile >> temp2;
            cArray[i].setPrevious(temp2);
            inputFile >> temp2;
            cArray[i].setCurrent(temp2);
            inputFile >> temp2;
            cArray[i].setTherms(temp2);
        }
    }
    return;
}

根据代码,如果看不到确切的输入,就无法判断,但我敢打赌,阅读在某种程度上确实失败了。由于你没有像往常一样检查你的输入,你的程序没有注意到这一点。作为一个侧节点,你读取的名称包括逗号,这可能也是不可取的。以下是我如何编写循环:

for(i = 0; i != arrSize
           && inFile >> number
           && std::getline(inFile, lastName, ',')
           && std::getline(inFile, firstName)
           && inFile >> previous
           && inFile >> current
           && inFile >> therms; ++i) {
    // set the various values
}

显然,需要适当地声明各种变量。实际上,我可能会考虑编写一个输入运算符。如果你发现你什么都读不懂,你需要找出输入哪里出了问题,例如,通过输出你在每个子表达式后成功读取了值,例如:

for(i = 0; i != arrSize
           && inFile >> number && std::cout << "number=" << number << 'n'
           && std::getline(inFile, lastName, ',') && std::cout << "name='" << lastName << "'n"
           && std::getline(inFile, firstName) && std::cout "first-name='" << firstName << 'n'
           && inFile >> previous && std::cout << "previous=" << previous << 'n'
           && inFile >> current && std::cout << "current=" << current << 'n'
           && inFile >> therms && std::cout << "therms=" << therms << 'n'; ++i) {
    // set the various values
}