为什么这两个函数istream :: get(char *,streamsize)和istream :: get(char *,streamsize,char)在找到'\ n'作为cin中的第一个字符时设置cin.fail位缓冲
可以看出here,这就是上面提到的两个重载的行为。我想知道以这种方式设计这些功能的目的是什么?请注意,两个函数都在缓冲区中保留字符'\ n',但如果您再次调用它们中的任何一个,它们将因换行符而失败,如链接所示。让这两个函数不要将字符'\ n'留在缓冲区中是不是更有意义,因为函数istream :: get()和istream :: getline()的重载呢?
答案 0 :(得分:1)
使用std::istream::getline
,如果找到分隔字符,则将其提取并丢弃。使用std::istream::get
时,分隔字符仍保留在流中。
使用getline
,您不知道,是否已读取和删除分隔字符,或者只读取n - 1
个字符。如果您只想阅读整行,可以使用get
然后使用peek
作为下一个字符,看看它是换行符还是给定的分隔符。
但是如果你想读取整行到某个分隔符,你也可以使用std::getline
,它在任何情况下都会读取整行。