-2

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

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

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

return 0;

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

4

2 回答 2

2

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

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

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

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

要忽略已知存在的字符,您需要首先断开<stdio.h>与 IOStreams 之间的连接,然后使用std::ios_base::sync_with_stdio()您上次读取后输入的已知字符,例如,

#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()让 IOStreams 实际缓冲从系统接收到的字符而不是单独读取字符是必要的。作为一个很好的副作用,它极大地提高了使用std:cin,std::cout和其他标准流对象的性能。

于 2013-09-05T01:39:23.850 回答
-1

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

于 2013-09-05T01:13:29.620 回答