C++按Enter键终止程序



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

cout << "Press Enter to End" << endl;
cin.ignore(); //ends after the user hits enter 
return 0;

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

我感觉到您在程序的早期有一些格式化的输入,即,它看起来像这样:

std::cin >> value;
do_something(value);
std::cout << "press enter to endn";
std::cin.ignore();

如果是这种情况,那么从输入value开始,输入缓冲区中就有一些字符。例如,可以有一个'n',但它也可以是任何奇怪的其他字符。当程序遇到std::cin.ignore()时,将读取此字符。

可能想要的是去掉缓冲区中当前已知的字符。这不完全是应该做的,因为这仍然可能错过已经输入但尚未传输的字符,但没有可移植的方法来清除所有潜在的字符(这通常不是问题,因为几乎没有任何用户界面依赖于终端的字符输入)。

要忽略已知存在的字符,您需要首先使用std::ios_base::sync_with_stdio()断开<stdio.h>和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 entern";
    std::cin.ignore();
}

sync_with_stdio()的奇数调用对于IOStreams实际缓冲从系统接收的字符而不是单独读取字符是必要的。作为一个很好的副作用,它显著地改进了使用std:cinstd::cout和其他标准流对象的性能。

可能会在代码末尾添加system("pause");(包括第一个)。我想你想输入以关闭终止。

最新更新