0

現在、クラスのプログラムに取り組んでいますが、inf.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())」をデータの最後の行を読み取るまでループさせ、出力ファイルの新しい行にすべての名前を出力することで機能することを示します。しかし、現在、出力ファイルに「-92559631349317830000000000000000000000000000000000000000000.00」の無限行を出力する無限ループが発生します。ここで何が間違っていましたか?

4

3 に答える 3

3

を使用して入力のループを制御することは、ほとんどの場合間違っており、このコンテキストでstream.eof()何を使用しているかを正確に知る必要があります。eof()いずれの場合も、ストリームからの読み取りを試みた、入力が成功したかどうかを常に確認する必要があります。

while (inf >> name >> qu1 >> qu2 >> prg1 >> prg2 >> fnl) {
    std::cout << name << '\n';
}
于 2013-09-26T19:26:41.590 に答える