0

ファイルからテキストを読み取って文字列に追加するこの関数がありますが、奇妙なことに、短いテキストの場合は正常に機能します。しかし、文字列が空になる長いテキストの場合、この問題を解決する助けがあれば幸いです。

 string inlasning(string namn)
{
    string filString, temp;

    ifstream filen(namn.c_str());

    if(!filen.good())
    {
        cout << "Otillganglig fil" << endl;
        filString = "ERROR";
        return filString;
    }
    else
    {
        while(!filen.eof())
            getline(filen, temp);
            filString.append(temp);
    }

    filen.close();
    return filString;

}
4

3 に答える 3

6

eof()1)ループの制御には使用しないでください。ループgetline状態に直接入れます。これを行うのに問題がある場合は、StackOverflow を検索してください。

2) while ループには中括弧がないためgetline、誤解を招くインデントにもかかわらず、行をカバーするだけです。

3)getline改行を破棄します。最終的な文字列は間違っています。

getline4)観察している実際の動作は、文字列に返される最後のものだけを追加するという事実から来ています。ファイルに 1 行のテキストが含まれていて、改行で終わっていない場合、これは機能しているように見えます。それ以上の行があり、改行で終わっていない場合は、最後の行のみが取得されます。ファイルが改行で終わっている場合、ループ条件が正しくないため、最後の呼び出しでgetline実際には空の文字列が返されます。これは文字列の内容とまったく同じです。

于 2013-08-26T16:20:35.033 に答える