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

时间:2018-04-19 20:02:52

标签: c++

这是

的c ++参考页面的示例
  • 的std :: basic_streambuf :: sputbackc

我试图找到:

  

为什么“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;
  }

1 个答案:

答案 0 :(得分:1)

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