-4

myfile.eof()で動作していませんturbo c++。これが私のフラグメントです:

    while(viofile  >> vio.studnumb >> vio.firstname >> vio.lastname >> vio.code >> vio.remarks >> vio.date >> '/`enter code here`' >> vio.month >> '/'>>vio.year >> "Noted by:" >> vio.filler >> vio.position >> vio.user)
   {
       if(vio.studnumb==studno)
       {
            cout << endl << studno << ' ' << vio.firstname << ' ' << vio.lastname << ' '<< endl;
            cout << "Violation :" << vio.code << ' ' << vio.remarks << ' ' << vio.date << '/' << vio.month<< '/' << vio.year <<endl;
            cout << "   Noted by: " << vio.positio`enter code here`n << ' ';
            cout <<vio.user;
    break;
   }
   else if(viofile.eof())
    cout << "You have no violation.\n";
   }

私には終わらせなければならないプロジェクトがあります。返信してください。

ありがとうございました。

4

2 に答える 2

1

operator>>ファイルの終わりに到達するための呼び出しeofbitが設定され、ブールコンテキストではストリームがfalseに変換されます。その時点で、プログラムはループから脱落します。実行がループになった場合、(bool)viofileまだ真実であるため、真実にviofile.eof()戻ることはできません。

ブール値フラグを使用します。ループの前に false に設定し、違反を出力するときに true に設定します。ループの後、このフラグがまだ設定されていない場合は、違反が出力されていないため、それに応じて報告できます。

于 2013-10-06T18:53:09.437 に答える
0

文字列リテラルに読み込むことはできません。つまり、

std::cin >> "<some string>"

違法です。対応する文字列をデコードする必要がある場合は、適切な解析ルーチンを作成する必要があります。

ループから抜け出す前に入力のセットを 1 つしか読み取らないため、その時点でファイルの最後に到達する必要がないため、失敗が発生していないことを確認すると思います。

if (in) {
    ...
}

通常、改行などの空白文字に遭遇すると入力が停止することを考えると、ファイルの終わりに到達したことを期待するために、少なくとも末尾の空白をスキップする必要があります。

if ((in >> std::ws).eof()) {
    ...
}
于 2013-10-06T18:58:32.247 に答える