0

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

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

4

1 回答 1

1

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

getline你不知道,如果分隔字符被读取并丢弃,或者只是字符n - 1被读取。如果您只想阅读整行,您可以使用getand thenpeek作为下一个字符,看看它是换行符还是给定的分隔符。

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

于 2013-01-14T17:59:36.137 回答