簡體   English   中英

從輸入文件到數組的混亂讀取

[英]messy reading from input file into array

我已經為此工作了很長時間,所以我想是時候問一個問題了,因為我不知道發生了什么。 無論在此循環中出於何種原因,它只能在第一次使用時才能正常工作,然后返回到文件的開頭,並再次從頭開始讀取。 謝謝。

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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM