4

我一直在互联网上寻找这个太久了。有没有办法可以按下任何键并立即停止暂停并继续执行代码,但它不会显示您在屏幕上按下的键(如系统(“暂停”))?

人们说过cin.get()类似的话,但是,如果我使用它,我必须按任意键并且它会显示在屏幕上,然后您必须按 Enter。

4

3 回答 3

4

由于您引用system("pause")我猜您使用的是 Windows,那么您可以使用_getch等待任何键。

于 2013-12-31T15:03:56.327 回答
2

Joachim Pileborg已经提到_getch了 Windows 特定的技术解决方案。

然而,这是一个寻找问题的解决方案……因为真的没有问题。

要查看控制台程序的最后输出,您可以使用以下任何方法:

  • 从命令行运行程序,例如 Windows 的标准 [cmd.exe] 命令解释器的实例。

  • 从 IDE 运行程序,使其在最后停止。例如,在 Visual Studio 中只需使用[Ctrl F5]

  • 在调试}器中运行程序,在main. 例如,在 Visual Studio 中,添加该断点并通过按键 [F5] 运行。

尤其是当您尝试第一个要点时,您会注意到在程序末尾有一个_getchsystem( "pause" )这样的,没有任何优势,而且很烦人!

于 2013-12-31T15:13:58.007 回答
1

我不知道 Windows(显然_getch()是要走的路),但在 UNIX 上,您可以使用和立即获取密钥将标准输入流(文件描述符0)设置为非规范模式。要禁止显示按键,您还需要禁用回显:tcgetattr()tcsetattr()

termios old_tio, new_tio;
int rc = tcgetattr(0,&old_tio);
new_tio=old_tio;
new_tio.c_lflag &=(~ICANON & ~ECHO);
rc = tcsetattr(0,TCSANOW,&new_tio);

std::string value;
if (std::cin >> value) {
    std::cout << "value='" << value << "'\n";
}

rc = tcsetattr(0,TCSANOW,&old_tio);

这段代码

  1. 首先获取终端标志的当前状态
  2. 清除ICANONECHO标志
  3. 读取隐藏的输入(在这种情况下是一个字符串,但它也可以是一个单独的键)
  4. 恢复原始设置

不幸的是,没有可移植的方式来处理这些设置,也就是说,您将需要求助于特定于平台的用途。不过,我认为tcgetattr()and的使用tcsetattr()适用于 POSIX 系统。

于 2013-12-31T15:21:14.557 回答