sbumpc() " ask me for in-6ren">
gpt4 book ai didi

c++ - 为什么 cin.rdbuf()->sbumpc() 在一个循环中只要求我输入一次?

转载 作者:行者123 更新时间:2023-11-28 04:42:32 26 4
gpt4 key购买 nike

这是

的c++引用页的例子
  • std::basic_streambuf::sputbackc

我正在努力寻找:

Why does " ch = pbuf->sbumpc() " ask me for input just one time in a loop and not in every cycle?

代码如下:

#include <iostream>     // std::cin, std::cout, std::streambuf, std::streamsize
int main () {
char ch;
std::streambuf * pbuf = std::cin.rdbuf();

std::cout << "Please, enter some letters and then a number: ";
do {
ch = pbuf->sbumpc(); //why this line ask an input just once in all the loop?

if ( (ch>='0') && (ch <='9') )
{
pbuf->sputbackc (ch);
long n;
std::cin >> n;
std::cout << "You entered number " << n << '\n';
break;
}
} while ( ch != std::streambuf::traits_type::eof() );

return 0;
}

最佳答案

假设您输入 LL10pbuf->sbumpc(); 从流中读取一个字符。所以它读取 L。因为它不在 0 和 9 之间,所以我们再次循环。 L10 仍在缓冲区中,因此我们再次读取 L。再次它不在范围内,所以我们再次循环。现在缓冲区中只有 10。我们读入 1,因为它在我们放回的范围内,使用 std::cin >> n; 读入缓冲区,然后 break 跳出循环。这就是为什么您只需输入一次。如果您只输入 LL,它会等待您输入更多内容。

关于c++ - 为什么 cin.rdbuf()->sbumpc() 在一个循环中只要求我输入一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49929338/

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