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