当'\ n'是第一个字符时,为什么istream :: get set cin.fail?

时间:2013-01-14 17:33:01

标签: c++ stream

为什么这两个函数istream :: get(char *,streamsize)和istream :: get(char *,streamsize,char)在找到'\ n'作为cin中的第一个字符时设置cin.fail位缓冲

可以看出here,这就是上面提到的两个重载的行为。我想知道以这种方式设计这些功能的目的是什么?请注意,两个函数都在缓冲区中保留字符'\ n',但如果您再次调用它们中的任何一个,它们将因换行符而失败,如链接所示。让这两个函数不要将字符'\ n'留在缓冲区中是不是更有意义,因为函数istream :: get()和istream :: getline()的重载呢?

1 个答案:

答案 0 :(得分:1)

使用std::istream::getline,如果找到分隔字符,则将其提取并丢弃。使用std::istream::get时,分隔字符仍保留在流中。

使用getline,您不知道,是否已读取和删除分隔字符,或者只读取n - 1个字符。如果您只想阅读整行,可以使用get然后使用peek作为下一个字符,看看它是换行符还是给定的分隔符。

但是如果你想读取整行到某个分隔符,你也可以使用std::getline,它在任何情况下都会读取整行。