5

我注意到,每当我编写一个使用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()调用时,我只需要一个。

4

2 回答 2

8

Discl:我正在简化真正发生的事情。

第一个用于清除提取运算符 (>>) 未使用的内容。第二个等待另一个\n。

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

于 2009-03-10T16:59:53.433 回答
0

那很奇怪。你在什么平台上运行?根据定义,ignore从输入流中提取并丢弃 n 个字符,或者如果它遇到 EOF 则停止。如果您不指定任何参数,它将提取 1 个字符。在 Windows 上,行尾包含 a\r和 a \n-- 总共两个字符(回车后跟换行符)。

于 2009-03-10T16:57:56.810 回答