getlineの()は、Eclipseで、空行を返しますが、DevのCで正常に動作してい++

StackOverflow https://stackoverflow.com/questions/2543057

  •  23-09-2019
  •  | 
  •  

質問

ここに私のコードは次のとおりです。

#include <iostream>
#include <stdlib.h>
#include <fstream>

using namespace std;

int main() {
    string line;
    ifstream inputFile;
    inputFile.open("input.txt");

    do {
        getline(inputFile, line);
        cout << line << endl;
    } while (line != "0");

    return 0;
}

INPUT.TXTコンテンツます:

5 9 2 9 3
8 2 8 2 1
0
でEnclipseは、それが無限ループになります。私はMinGWの5.1.6 + EclipseのCDTを使用しています。

私は多くのことを試してみましたが、私は問題を見つけることができませんでした。

役に立ちましたか?

解決

は、Windows上にあるので、試してみてください。

} while (line != "0\r");

最後の行は"0\r\n"として記憶されます。実際のラインを読むであろうよう\n"0\r"

のgetlineによって行区切り文字として使用されています

または

コマンドを使用してUNIX形式にDOS形式のファイルを変換することができます。

dos2unix input.txt

さて、あなたのオリジナルのプログラムが動作するはずです。コマンドは\r\nへの行の最後に\nを変更します。

あなたがファイルを開こうとした後、また、あなたは常に、のようなものをエラーチェックを行う必要があります:

inputFile.open("input.txt");
if(! inputFile.is_open()) {
 cerr<< "Error opening file";
 exit(1);
}

他のヒント

何のラインが正確に0含まれていない場合は、

これは、無限ループを作成します。例えば0\n0と同じものではありません。私の推測では、それはあなたの問題であるということです。

EDIT:詳述すると、getlineのは、改行を破棄しなければなりません。おそらく、あなたのファイルの誤った(UNIX対すなわち窓)の改行エンコーディングます。

あなたの主な問題は、ディレクトリを働いている。
あなたはそれが現在の作業ディレクトリからファイルを検索し、相対パスを使用してファイルを指定しているので。作業ディレクトリは、あなたのdevの環境で指定することができます。 (注:作業ディレクトリ必ずしもではありません同じディレクトリところ、実行可能命(これは)初心者の間で共通の前提であるが、唯一の非常に特殊な状況下で保持している)。

あなたが入力マーカーの特別な終わりを持っていますが、

は「0」、あなたはまた、それが)ビーディ・フォーマットされた入力を含む他の理由(のためにエラー可能性としてのgetline()は(失敗していないことを確認する必要があります。それは通常ベストですそのようにあなたはそれを読むと、ファイルの状態をチェックします。

int main()
{
    string   line;
    ifstream inputFile;
    inputFile.open("input.txt");

    while((getline(inputfile, line)) && (line != "0"))
    {
        // loop only entered if getline() worked and line !="0"
        // In the original an infinite loop is entered when bad input results in EOF being hit.

        cout << line << endl;
    }
    if (inputfile)
    {
        cout << line << endl; // If you really really really want to print the "0"
                             // Personally I think doing anything with the termination
                             // sequence is a mistake but added here to satisfy comments.
    }

    return 0;
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top