web-dev-qa-db-ja.com

C ++:getline();でifstreamを使用する

このプログラムをチェック

ifstream filein("Hey.txt");
filein.getline(line,99);
cout<<line<<endl;
filein.getline(line,99);
cout<<line<<endl;
filein.close();

Hey.txtファイルには、多数の文字が含まれています。 1000以上

しかし、私の質問は、なぜ2回目に行を印刷しようとするかです。印刷されませんか?

8

C++リファレンス( ここ )によれば、getlineは、count-1文字が抽出されたときに_ios::fail_を設定します。 filein.clear();の呼び出しの間にgetline()を呼び出す必要があります。

11
Roman Kutlak

したがって、ストリームから行を読み取る慣用的な方法は次のとおりです。

_{
    std::ifstream filein("Hey.txt");

    for (std::string line; std::getline(filein, line); )
    {
        std::cout << line << std::endl;
    }
}
_

注意:

  • いいえclose()。 C++は、慣用的に使用すると、リソース管理を処理します。

  • ストリームメンバー関数ではなく、無料の_std::getline_を使用します。

38
Kerrek SB

Kerrek SBが正しく言ったように、2つの可能性があります。1)2行目が空の行である2)2行目がなく、1000文字を超える文字が1行にあるため、2番目のgetlineには何も取得できません。

1
BigBoss