我一直在互联网上寻找这个这么久。有没有办法按任何键,它会立即停止暂停并继续执行代码,但它不会在屏幕上显示您按下的键(如系统("暂停"))?
人们说cin.get()
之类的东西,但是,如果我使用它,我必须按任何键,它就会显示在屏幕上,然后您必须按回车键。
既然你引用的是system("pause")
我想你使用的是Windows,那么你可以使用_getch
来等待任何键。
Joachim Pileborg已经提到_getch
是Windows特定的技术解决方案。
然而,这是一个寻找问题的解决方案......因为真的没有问题。
若要查看控制台程序的最后一个输出,可以使用以下任一方法:
-
从命令行运行程序,例如Windows标准[cmd.exe]命令解释器的实例。
-
从 IDE 运行程序,使其在最后停止。 例如,在Visual Studio中只需使用[Ctrl F5]。
-
在调试器中运行程序,在
main
的结束}
上有一个断点。 例如,在Visual Studio中,添加该断点并通过按键[F5]运行。
特别是当您尝试第一个要点时,您会注意到在程序结束时有一个_getch
或system( "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);
此代码
- 首先获取终端标志的当前状态
- 清除
ICANON
和ECHO
标志 - 读取隐藏的输入(在本例中为字符串,但也可以是单个键)
- 恢复原始设置
不幸的是,没有便携式方法来处理这些设置,即,您将需要求助于平台特定的用途。不过,我认为tcgetattr()
和tcsetattr()
的使用适用于POSIX系统。