gpt4 book ai didi

c++ - 为什么当 '\n' 是第一个字符时 istream::get 设置 cin.fail?

转载 作者:行者123 更新时间:2023-11-28 07:48:38 27 4
gpt4 key购买 nike

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

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

最佳答案

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

使用 getline,您不知道,是否读取并丢弃了定界字符,或者是否只读取了 n - 1 个字符。如果只想读取整行,可以使用 get 然后使用 peek 查找下一个字符,看看它是换行符还是给定的分隔符。

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

关于c++ - 为什么当 '\n' 是第一个字符时 istream::get 设置 cin.fail?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14323550/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com