C ++按Enter键终止程序

时间:2013-09-05 00:57:26

标签: c++ cin

我正在编写一个C ++程序,我需要在用户点击进入后编程结束/终止。 这就是我所拥有的:

cout << "Press Enter to End" << endl;

cin.ignore(); //ends after the user hits enter 

return 0;

但它不起作用。有什么建议?

2 个答案:

答案 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:cinstd::cout和其他标准流对象的性能。

答案 1 :(得分:-1)

可能在代码末尾添加系统(“暂停”); (首先包括在内)。我想你想要进入关闭终止。