文件结束无限循环

时间:2014-10-16 15:25:03

标签: c++ while-loop eof

我有这个程序我写的是从文件读取和计算原理和兴趣并将表打印到输出文件。一切正常,但我无法弄清楚为什么我会陷入主要的while循环中。它正确打印我的所有数据,但它不断等待另一个值并且不会退出。任何人都能为我解释一下吗?

int main()
{
  ifstream inData;
  ofstream outData;
  float principle=0;
  int years;
  float rate;

  inData.open("inputdata.txt");
  if (!inData){
   cout<<"Error opening file."<<endl;
   return 1;}

  outData.open("outputdata.txt");
  if (!outData){
   cout<<"Error opening file."<<endl;
   return 1;}

  getData(inData, principle, years, rate);

  while(!inData.eof(){
    printTable(outData, principle, years, rate);

    principle=0;
    getData(inData, principle, years, rate);
  }

  return 0;
}

void getData (ifstream& inData, float& principle, int& years, float& rate)
{
 char temp;
 int temp2=0;

 inData.get(temp);

 while(temp!=' '){
    if(isdigit(temp)){
        temp2=temp-'0';
        principle=(10*principle)+temp2;}

    inData.get(temp);
 }

 inData>>years>>rate;
}

1 个答案:

答案 0 :(得分:4)

阅读完最后一条记录后,最后一次会拨打getData()。这将读取temp,并且会因为它位于文件末尾而失败。然后它进入while循环。 temp永远不会等于空格,因此永远不会退出该循环。如果文件没有在空格中结束,您也会被卡住。

您需要在eof while循环中检查getData()