我一直在互联网上寻找这个太久了。有没有办法可以按下任何键并立即停止暂停并继续执行代码,但它不会显示您在屏幕上按下的键(如系统(“暂停”))?
人们说过cin.get()
类似的话,但是,如果我使用它,我必须按任意键并且它会显示在屏幕上,然后您必须按 Enter。
我一直在互联网上寻找这个太久了。有没有办法可以按下任何键并立即停止暂停并继续执行代码,但它不会显示您在屏幕上按下的键(如系统(“暂停”))?
人们说过cin.get()
类似的话,但是,如果我使用它,我必须按任意键并且它会显示在屏幕上,然后您必须按 Enter。
由于您引用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 上,您可以使用和立即获取密钥将标准输入流(文件描述符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);
这段代码
ICANON
和ECHO
标志不幸的是,没有可移植的方式来处理这些设置,也就是说,您将需要求助于特定于平台的用途。不过,我认为tcgetattr()
and的使用tcsetattr()
适用于 POSIX 系统。