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