麻烦使用.eof

时间:2013-09-26 19:22:52

标签: c++ eof

现在我正在为一个课程开发一个程序,但是我无法完成工作。 数据文件是:

Julie 100 100 100 100 100
Sam 90 0 100 95 90
Trudy 85 77 100 87 81
Will 85 81 0 89 72
George 81 83 100 79 55
Hannah 87 90 100 99 95
Cathy 93 96 95 82 65
Hal 65 71 0 75 88
Xena 100 100 100 100 0

代码是:

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>
#include <assert.h>
using namespace std;
double score;

double getave(int a,int b)
{
        double average;
        average = 1.0 * (a + b)/2;
        return average;
}

void getclassave()
{

}

double getgrade(double score)
{
    double grade;
if(score >= 90)
    grade = 'A';
else if(score >=80)
    grade = 'B';
else if(score >= 70)
    grade = 'C';
else if(score >= 60)
    grade = 'D';
else
    grade = 'F';
return grade;
}

void printtitles()
{

}



void main()
{
ifstream inf;
    inf.open("input.data");
ofstream outf;
    outf.open("data.out");
outf.setf(ios::fixed);
outf.precision(2);
double name, qu1, qu2, prg1, prg2, fnl;
while(!inf.eof())
{   
    inf >> name >> qu1 >> qu2 >> prg1 >> prg2 >> fnl;
    cout << name << endl;
}
system("pause");
}

我现在只在void main()上工作,因为我需要能够读取文件来完成剩下的工作。我希望“whine(!inf.eof())”循环,直到它读取最后一行数据,然后通过在输出文件中的新行上打印所有名称来显示它。但是现在它导致一个无限循环,在我的输出文件中输出无限行“-92559631349317830000000000000000000000000000000000000000000000.00”。我在这里做错了什么?

3 个答案:

答案 0 :(得分:3)

这应该有效: -

while(inf >> name >> qu1 >> qu2 >> prg1 >> prg2 >> fnl)
{   

    cout << name << endl;
}

答案 1 :(得分:3)

使用stream.eof()来控制循环输入几乎总是错误的,你需要非常准确地知道在这种情况下你使用eof()做了什么。在所有情况下,您始终想要检查您的输入是否成功在您尝试从流中读取后

while (inf >> name >> qu1 >> qu2 >> prg1 >> prg2 >> fnl) {
    std::cout << name << '\n';
}

答案 2 :(得分:0)

看起来你需要一些更易于诊断的东西:

while (inf >> name)
{
  inf >> qu1;
  if (!inf.good())
  {
      std::cerr << "Error reading qu1.\n";
      break;
  }
  inf >> qu2;
  if (!inf.good())
  {
      std::cerr << "Error reading qu2.\n";
      break;
  }
//....

是的,你可以读取一个语句中的所有变量,但这使得识别失败的位置变得困难。在一个语句中读取所有内容时,您不知道哪个变量导致了失败。