11

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

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

ファイル Hey.txt には多くの文字が含まれています。1000を優に超える

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

4

4 に答える 4

54

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

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

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

ノート:

  • いいえclose()。C++ を慣用的に使用すると、リソース管理が自動的に行われます。

  • std::getlineストリーム メンバー関数ではなく、free を使用します。

于 2012-08-26T19:56:22.327 に答える
12

C++ リファレンス ( here ) によると、getline はios::failcount-1 文字が抽出されたときを設定します。通話filein.clear();の合間にgetline()通話する必要があります。

于 2012-08-26T20:18:46.100 に答える
2
#include<iostream>
using namespace std;
int main() 
{
ifstream in;
string lastLine1;
string lastLine2;
in.open("input.txt");
while(in.good()){
    getline(in,lastLine1);
    getline(in,lastLine2);
}
in.close();
if(lastLine2=="")
    cout<<lastLine1<<endl;
else
    cout<<lastLine2<<endl;
return 0;
}
于 2020-05-21T18:21:27.307 に答える
0

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

于 2012-08-26T20:22:03.403 に答える