首页 文章

执行cin后计算标准输入中的字符数

提问于
浏览
0

我有一些基本上看起来像这样的代码

int a;
cin>>a;

if(!cin.good())
{
    std::cin.clear();
    std::cin.ignore(2);

    // set some default value for 'a' and display some messages
}

如果我给出一个整数(如预期的那样)或者如果我试图稍微弄乱它并且最多给2个字符,这可以正常工作 . 例如 . 'ss',但是如果我给出3个字符输入'sss',那么最后的's'不会被忽略,并且被接受作为我在我的程序中有更多cin的输入 .

有没有办法计算第一个cin发生后标准输入(缓冲区?)中的字符数,所以我可以安全地忽略所有这些字符 .

3 回答

  • 0

    这是如何运作的?它应该忽略输入缓冲区中的所有可用内容,防止第三个 s 稍后被消耗 . 它使用std::basic_streambuf::in_avail .

    std::cin.ignore(std::cin.rdbuf()->in_avail());
    

    如果这不起作用,您可以尝试忽略,直到您到达换行符 .

    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
    
  • 2

    目前还不清楚你的意思,但一个意思是你想要忽略当前行上的所有字符 . 您不需要知道要执行此操作的字符数:

    std::cin.ignore(std::numeric_limits<std::size_type>::max(), '\n');
    

    上述语句将忽略所有字符,直到它提取换行符 .

  • 3

    做一些谷歌搜索我在how to cope with extraneous characters in cin找到了这篇文章 .

    显然,直接在 std::cin 上使用 >> 并不是一个好习惯 . 像这样使用它,

    int a;
    std::string line;
    std::getline( cin, line );
    std::stringstream ss( line );
    
    if ( ss >> a )
        // Success
    
    // Failure: input does not contain a valid number
    

    由于我们每次使用 std::getline() 时都在阅读 \n ,因此也会从 std::cin 中提取无关字符并将其放入 line .

    Code source

相关问题