3

C++ で 2 つの文字列を比較しようとすると (1 つはファイルから読み込まれ、もう 1 つは値が割り当てられます)、正しくない出力が得られます。

ifstream pgmFile;
pgmFile.open(fileName);
string temp;
string comp = "P5";


for(int i = 0; i < 2; i++)
{

    pgmFile >> noskipws >> temp;
    cout << temp;

}

if(temp == comp)
{}
else
    cout << "File does not contain 'P5'.  Please provide the correct type of file." << endl;

理論的には、これは、これら 2 つの文字列が正しいことを示す「true」を返す必要があります。temp = "P5" の出力なので、毎回 else の場合にヒットする理由がわかりません。どんな助けでも大歓迎です!

4

3 に答える 3

4

tempこれは、値を2 回 (最初の for ループで)読み取ったために発生する可能性が最も高いです。そして、空の文字列を 2 回目に読み取ります (たとえば、ステータスは EOF である必要があります)。空の文字列を出力しても、それは表示されません。次に、'' と 'P5' を比較すると、これら 2 つのことは同じではありません。

「for」ループの後に印刷ステートメントを移動して、それが保持する値を確認できます。これが「P5」と比較されます。

それが役に立てば幸い。幸運を!

于 2013-09-19T19:55:40.207 に答える
1

noskipws空白文字 ('\r'、'\n'、'\t' など) を文字列にロードします。の長さを確認すると、最後の空白tempのために の長さとは異なる可能性がありcompます (推測する必要がある場合は、おそらく改行だと思います)。

編集: ループについて詳しく説明しましたが、これは不要で、2 回目の読み取りで pgmFile.bad フラグが設定されている可能性があります (「P5」だけが含まれている場合、最初の読み取りでファイル全体が読み取られるため)。

于 2013-09-19T19:55:44.453 に答える