[英]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.