1

メンバー関数istream& istream::getline(char* s, streamsize n, char delim);を使用すると、次の 3 つのいずれかが発生するまで、ストリームから文字を抽出できます。

  1. 指定された区切り文字が見つかり、
  2. n - 1文字がストリームから読み取られる、または
  3. EOF またはエラーが発生する

明らかに、条件 3 (エラーが発生する) は簡単に検出できます。しかし、呼び出し元はどのようにして条件 (1) と (2) を区別できるのでしょうか? 区切り文字があったかどうかをどのように判断できますか? 文字が読み取られた可能n - 1性がありますが、区切り文字が見つかりませんでした。

4

3 に答える 3

3

http://en.cppreference.com/w/cpp/io/basic_istream/getlineによると

状況 3 では、setstate(eofbit)実行されます。

状況 2 では、setstate(failbit)実行されます。

于 2013-02-16T21:10:43.050 に答える
1

質問を取り消すことができます。を使用しgetline(std::basic_istream&, std::basic_string&, Elem delim);ます。または、C++11 を使用している場合は、getline(std::basic_istream&&, std::basic_string&, Elem delim);. つまり、 に読み込みますstd::string。そうすれば、配列のサイズを扱う必要はありません。

于 2013-02-16T21:32:59.703 に答える
0

を使用std::istream::gcount()して、読み取った文字数を知り、それを比較してn、質問に対する答えを見つけることができます。また、delim を見つけるために出力バッファを検索することもできます。

于 2013-02-16T21:10:18.540 に答える