成员函数istream& istream::getline(char* s, streamsize n, char delim);
使您能够从流中提取字符,直到发生以下 3 件事之一:
- 找到指定的分隔符,
n - 1
从流中读取字符,或- 发生 EOF 或错误
显然,条件 3(发生错误)很容易检测到。但是调用者如何区分条件(1)和(2)呢?您如何判断分隔符是否存在?可能n - 1
已读取字符,但未找到分隔字符。
根据http://en.cppreference.com/w/cpp/io/basic_istream/getline
在情况 3 中,setstate(eofbit)
将被执行。
在情况 2 中,setstate(failbit)
将被执行。
你可以不问这个问题。使用getline(std::basic_istream&, std::basic_string&, Elem delim);
. 或者,如果您使用的是 C++11,那就是getline(std::basic_istream&&, std::basic_string&, Elem delim);
. 也就是说,读入一个std::string
. 如果你这样做,你不必处理数组大小。
您可以使用std::istream::gcount()
来了解读取的字符数,并将其与n
找出问题的答案进行比较。此外,可以搜索输出缓冲区以找出分隔符。