我正在编写一个C ++程序,我需要在用户点击进入后编程结束/终止。 这就是我所拥有的:
cout << "Press Enter to End" << endl;
cin.ignore(); //ends after the user hits enter
return 0;
但它不起作用。有什么建议?
答案 0 :(得分:2)
我觉得你的程序早先有一些格式化的输入,即它看起来像这样:
std::cin >> value;
do_something(value);
std::cout << "press enter to end\n";
std::cin.ignore();
如果是这种情况,从输入value
开始,输入缓冲区中就会出现一些字符。例如,可以有'\n'
,但也可以是任何奇怪的其他字符。当程序遇到std::cin.ignore()
时,将读取此字符。
你可能想要的是摆脱当前已知在缓冲区中的字符。这不是完全可以做的,因为它仍然可以错过已经输入但尚未转移的字符,但是没有可移植的方法来清除所有潜在的字符(这通常不是问题,因为几乎没有任何用户界面依赖于从终端输入的字符。)
要忽略已知存在的字符,您需要先使用<stdio.h>
断开std::ios_base::sync_with_stdio()
和IOStreams之间的连接,然后使用上次读取后输入的已知字符,例如,
#include <iostream>
int main()
{
std::ios_base::sync_with_stdio(false);
int x;
std::cin >> x;
std::cin.ignore(std::cin.rdbuf()->in_avail());
std::cout << "press enter\n";
std::cin.ignore();
}
对sync_with_stdio()
的奇怪调用对于让IOStream实际缓冲从系统接收的字符而不是单独读取字符是必要的。作为一个很好的副作用,它显着提高了使用std:cin
,std::cout
和其他标准流对象的性能。
答案 1 :(得分:-1)
可能在代码末尾添加系统(“暂停”); (首先包括在内)。我想你想要进入关闭终止。