0

不明な数の SSN と成績を含むテキスト ファイルをユーザーに読み込むよう求める宿題を書いています。次に、プログラムは最大、最小、および平均スコアを計算し、関連する SSN とともに最大グレードと最小および平均グレードを出力する必要があります。

正常に動作しているように見えますが、出力はすべて「0」です。

これを修正する助けがあれば大歓迎です。

コード:

#include <iostream>
#include <fstream>
#include <string>
#include <iomanip>


using namespace std;

int main()
{
    string ssn, maxSSN;
    int grade = 0, totalGrades = 0, count = 0, maxScore = 0, minScore = 0;
    double avgScore = 0;

    ifstream inFile;
    inFile.open("C:\\lab5a.txt");

    if(!inFile)
    {
        cout << "Error opening the requested file\n\n";
        system("pause");
        return 101;
    }



    while (!inFile.eof())
    {
        if (count == 0)
        {
            maxScore = grade;
            minScore = grade;
        }
        else
        {
            if (grade > maxScore)
                maxScore = grade;
            if (grade < minScore)
                minScore = grade;
        }
            grade += totalGrades;
            count++;

    }

    if (count)
        avgScore = totalGrades / count;

    cout << "Maximum Score: " << maxScore << "      Student SSN:" << maxSSN << "\n";
    cout << "Minimum Score: " << minScore << "\n";
    cout << "Average Score: " << avgScore << "\n";
    // studentFile >> ssn >> grade;

    inFile.close();

    cout << "\n\n";
    system("pause");
    return 0;

}
4

2 に答える 2

3

1. から何も読んでいませんinFile。ほとんどの場合、成績の値を読み取りたいとします。

 while (!inFile.eof())
 {
     inFile >> grade;
     ...

@Blastfurnace からのフィードバックによると、使用inFile.eof()も間違っています。次の入力ファイルを検討してください。

3
5
9
17

各行は で終了しlfます。次に、値が読み取られたにファイルの終わりが検出されないため、ループは5 行を読み取りますが、ファイルから別の値を読み取ろうとします。ループが終了するときになりますが、これは間違っています。17count5

代わりに次の条件を使用します。

 while (inFile >> grade)
 {
   ...

ssn も読み取るには、次を使用します。

while (inFile >> ssn >> grade)
{
   ...

これにより、ループ本体の実行時に と の両方ssngradeファイルから読み取られることが保証されます。

2. の計算のtotalGradesオペランドの順序が間違っています:

 grade += totalGrades;

する必要があります

 totalGrades += grade;

3.doubleと宣言していますavgScoreが、

 avgScore = totalGrades / count;

整数演算を行うため、浮動小数点の結果が得られることはありません。少なくとも 1 つのオペランドを double にキャストする必要があります。

 avgScore = totalGrades / (double) count;

4.まだ欠けているのは、SSNの取り扱いです

ファイルから成績とともにそれを読み取り、値maxSSNを割り当てるのと同じ場所に割り当てる必要がありmaxScoreます。

于 2013-03-27T19:27:07.437 に答える
0

ファイルを読み取っていないため、入力gradeとして取りません。

于 2013-03-27T19:29:12.593 に答える