为什么第二个cin.ignore()是必要的?

Cri*_*omo 5 c++ input

我注意到,每当我编写一个使用std::cin它的程序时,如果我希望用户按Enter键结束程序,我必须写std::cin.ignore()两次才能获得所需的行为.例如:

#include <iostream>

int main(void)
{
    int val = 0;
    std::cout << "Enter an integer: ";
    std::cin >> val;

    std::cout << "Please press Enter to continue..." << std::endl;

    std::cin.ignore();
    std::cin.ignore();  // Why is this one needed?
}
Run Code Online (Sandbox Code Playgroud)

我也注意到,当我不是cin用于实际输入而是仅用于最后的ignore()呼叫时,我只需要一个.

Luc*_*tte 8

Discl:我正在简化实际发生的事情.

第一个用于清除提取操作符(>>)未消耗的内容.第二个等待另一个\n.

在提取后执行std :: getline时完全相同:the_stream::ignore(std::numeric_limits<streamsize>::max(), '\n');在调用std :: getline()之前需要a

  • 啊,我明白了.因此,如果您在第一个提示符处输入的字符是"123 \n",则表示运算符>>()单独留下"\n",第一个ignore()读取它; 然后第二个ignore()等你按一个键然后读取(第二个"\n").+1. (3认同)