我已经工作了很长时间,所以我觉得是时候提问了,因为我不知道发生了什么。无论出于何种原因,这个循环只能在第一次正常工作,然后返回到文件的开头并再次从头开始读取。谢谢。
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;
}
答案 0 :(得分:1)
基于代码并且没有看到确切的输入,这是不可能的,但我敢打赌,阅读实际上失败了。由于您没有像往常一样检查输入,因此您的程序不会注意到它。作为侧节点,您可以读取包含逗号的名称,这可能也是不可取的。以下是我编写循环的方法:
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
}