std :: ifstreamを使用して検出し、次の行に移動するにはどうすればよいですか?
void readData(ifstream& in)
{
string sz;
getline(in, sz);
cout << sz <<endl;
int v;
for(int i=0; in.good(); i++)
{
in >> v;
if (in.good())
cout << v << " ";
}
in.seekg(0, ios::beg);
sz.clear();
getline(in, sz);
cout << sz <<endl; //no longer reads
}
エラーが発生したかどうかを教えてくれますが、エラーが発生するとストリームは機能しなくなります。別のintを読み取る前に、行末にいるかどうかを確認するにはどうすればよいですか?
次の行まですべてを無視するには、ignore()を使用します。
in.ignore(std::numeric_limits<std::streamsize>::max(), '\n')
手動で行う必要がある場合は、他の文字をチェックして、「\ n」かどうかを確認してください。
char next;
while(in.get(next))
{
if (next == '\n') // If the file has been opened in
{ break; // text mode then it will correctly decode the
} // platform specific EOL marker into '\n'
}
// This is reached on a newline or EOF
不良ビットをクリアする前にシークを実行しているため、これはおそらく失敗しています。
in.seekg(0, ios::beg); // If bad bits. Is this not ignored ?
// So this is not moving the file position.
sz.clear();
getline(in, sz);
cout << sz <<endl; //no longer reads
ループの後にin.clear();
を使用してストリームのエラー状態をクリアする必要があります。そうすると、エラーが発生しなかったかのようにストリームが再び機能します。
また、ループを次のように単純化することもできます。
_while (in >> v) {
cout << v << " ";
}
in.clear();
_
操作が成功するとストリーム抽出が返されるため、in.good();
を明示的にチェックせずにこれを直接テストできます。