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

时间:2009-03-10 16:48:11

标签: 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?
}

我也注意到,当我没有使用cin进行实际输入,而只是在最后使用ignore()时,我只需要一个。

2 个答案:

答案 0 :(得分:8)

Discl:我正在简化实际情况。

第一个用于清除提取操作符(&gt;&gt;)尚未消耗的内容。 第二个等待另一个\ n。

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

答案 1 :(得分:0)

这很奇怪。你在运行什么平台?根据定义,ignore从输入流中提取并丢弃n个字符,或者如果它命中EOF则停止。如果未指定任何参数,则会提取1个字符。在Windows上,行结尾涉及\r\n - 总共两个字符(回车符后跟换行符)。