我注意到每当我编写一个使用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()
时,我只需要一个。
答案 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
- 总共两个字符(回车符后跟换行符)。