这是
的c ++参考页面的示例我试图找到:
为什么“ch = pbuf-> sbumpc()”要求我在循环中输入一次而不是在每个循环中输入?
这是代码:
#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;
}
答案 0 :(得分:1)
让我们说你输入LL10
。 pbuf->sbumpc();
从流中读取一个字符。所以它读入L
。由于这不是0到9之间,我们再次循环。 L10
仍在缓冲区中,因此我们再次阅读L
。它再次不在范围内,所以我们再次循环。现在缓冲区中只有10
。我们在1
读取,因为它在我们放回的范围内,使用std::cin >> n;
然后break
读取缓冲区。这就是你只需输入一次输入的原因。如果你只输入LL
,它会等你输入更多。