0

ファイルからいくつかの情報を読み取ることになっているC++コードスニペットがあり、ファイルまたは情報が見つからないため、画面から読み取ります。コードは次のとおりです。

char c;
bool found=false;
int N;
double step;
ifstream in;
in.open(name.c_str());
if(in) {
    while(!found && in >> c) {
        while(c!='=') in >> c;
        in >> N;
        if(N==wp.N) {
            found=true;
            while(c!=':') in >> c;
            in >> step;
        }
        c='a';
    }
}
if(!found) {
    cout << "max=";
    cin >> step;
}

上記はファイル内のデータの構造に従って構築され、情報がファイル内にある場合 (つまり、ある時点でN=wp.N )、またはファイルが存在しない場合 (つまり、if(in)が違います)。

ただし、ファイルが存在するが情報が含まれていない場合、つまりN==wp.Nが真ではない場合に問題が発生します。次に、プログラムがフリーズします (おそらくファイルの最後で、見つかったことが真になることはありません)。whileループ内にin >> cを含めることでこれが修正されることを期待していましたが、 in.eof()も使用してみました。

助言がありますか?

4

2 に答える 2

1

>>のいずれかの後にeof()が見つかる場合があります。

したがって、while(c!=':')またはwhile(c!='=')でループしていると思います

于 2013-01-09T16:54:53.283 に答える
1

問題は2番目のループにあり、。を読み取らずにファイルの終わりに達すると無限にループします'='in >> cそこにも状態が必要です 。

于 2013-01-09T16:57:33.300 に答える