有没有办法像系统一样暂停(“暂停”)?

时间:2013-12-31 15:01:37

标签: c++ pausing-execution

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

人们说cin.get()和类似的东西,但是,如果我使用它,我必须按任意键并且它会显示在屏幕上,你必须在此之后按Enter键。

3 个答案:

答案 0 :(得分:4)

由于您引用system("pause")我猜您正在使用Windows,因此您可以使用_getch等待任何密钥。

答案 1 :(得分:2)

Joachim Pileborg已将_getch提及为特定于Windows的技术解决方案。

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

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

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

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

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

特别是当您尝试第一个项目符号点时,您会注意到在程序结束时使用_getchsystem( "pause" )或类似内容,没有任何优势并且可能非常烦人!

答案 2 :(得分: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. 恢复原始设置
  5. 遗憾的是,没有便携式处理这些设置的方法,即您需要采用特定于平台的用途。我认为 tcgetattr()tcsetattr()的使用适用于POSIX系统。