0

この任務を手伝ってくれませんか。

3 人の学生の ID とマークを含む txt ファイルを作成することになっています。出力は、別の txt ファイルの ID とメッセージである必要があります。

コードを実行しようとすると、出力 txt ファイルが空白になります。プログラムが結果を画面に出力するようにコードを変更しようとしましたが、何らかの理由で最初の行が読み取られず、3 行目が繰り返されます。

Visual Studio 2012 を使用しています。

入力データ:

20112233    90
20115566    80
20113756    70

これが私のコードです:

#include <iostream>
#include <fstream>
using namespace std;
void main ()
{

    int ID, mark, c=1;

    ifstream fin;
    fin.open ("marks.txt");
    fin >> ID >> mark;

    ofstream fout;
    fout.open ("grades");

    while (c<=3)
    {   

    fin >> ID >> mark;

    if (mark >= 90 && mark <= 100) {
            fout << ID << "\t" << "Excellent" << endl;
    c++;
    }
    else if (mark >= 80 && mark <= 89) {
            fout << ID << "\t" << "Very Good" << endl;
        c++;
    }

    else if (mark >= 70 && mark <= 79) {
            fout << ID << "\t" << "Good" << endl;
    c++;
    }

        else  if (mark >= 60 && mark <= 69) {
            fout << ID << "\t" << "Accepted" << endl;
        c++;
        }

        else if (mark >= 0 && mark <= 59) {
            fout << ID << "\t" << "Fail" << endl;
        c++;
        }

        else fout << "Wrong data";

    }


    fin.close ();
    fout.close ();

    system ("PAUSE");

}
4

2 に答える 2

1

まず第一にmain関数はint.

次に、ストリームから読み取りを実行して破棄しているようです。

fin >> ID >> mark; // Read tokens and clear them from the stream.

第三に、ストリームから読み取ったかどうか、および何を読み取ったかを確認しません。

while (c<=3)
{   

fin >> ID >> mark; // What if this fails?

代わりに次のようにしてみてください。

#include <fstream>

int main () {
    std::ifstream fin("marks.txt");
    std::ofstream fout("grades");

    int id, mark;
    while (fin >> id >> mark) { // Loop while tokens can be read successfully
        if (mark >= 90 && mark <= 100) {
            fout << id << "\tExcellent" << std::endl;
        } else if (mark >= 80 && mark <= 89) {
            fout << id << "\tVery Good" << std::endl;
        } else if (mark >= 70 && mark <= 79) {
            fout << id << "\tGood" << std::endl;
        } /* ... */
    }
}
于 2013-11-03T18:58:37.777 に答える