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找出问题的答案进行比较。此外,可以搜索输出缓冲区以找出分隔符。

于 2013-02-16T21:10:18.540 回答