有没有办法像系统("pause")一样暂停?



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

人们说cin.get()之类的东西,但是,如果我使用它,我必须按任何键,它就会显示在屏幕上,然后您必须按回车键。

既然你引用的是system("pause")我想你使用的是Windows,那么你可以使用_getch来等待任何键。

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

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

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

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

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

  • 在调试器中运行程序,在 main 的结束}上有一个断点。 例如,在Visual Studio中,添加该断点并通过按键[F5]运行。

特别是当您尝试第一个要点时,您会注意到在程序结束时有一个_getchsystem( "pause" )之类的,没有任何优势,而且可能很烦人!

我不知道

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

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()tcsetattr()的使用适用于POSIX系统。

最新更新