0

私は以下のようなコードを持っています。temps = $Nodesループが終了するたびに。temps私はすべての反復をチェックtemps = $Nodesし、期待どおりに一度それを見ましたが、ループは終了しませんでした. このコードは VS10 では機能しましたが、Linux では機能しませんでした。何か案が?

std::string temps;
s_mesh_file.open (mesh_file.c_str());

do
{
    getline (s_mesh_file, temps);
    std::cout << "temps: " << temps << std::endl;
    std::cin.ignore();
}
while (temps != "$Nodes");
4

2 に答える 2

1

まったく同じ入力ファイルを使用していますか? Windows の改行を含めますか? Linux は Windows の改行が好きではありません。(また、Windows は Linux のようなものではありません)

Windows では、各改行の\r後に\n. Linux では、改行は単なる \n. ストリームはデフォルトで「テキストモード」で開き、システムの改行が何であれ\n. そのため、Windows でファイルを読み取ると、\r役に立ちます。ただし、Linux はそれが改行の一部であることを認識しないため、\r他の通常の文字と同様に文字列の末尾に を配置するため、ハードコードされた と一致しません"$Nodes"

于 2013-01-10T21:09:42.320 に答える
0

を削除しstd::cin.ignore();ます。実際にユーザーの入力を待っています。Linux でテスト済み。

于 2013-01-10T20:59:53.617 に答える