C++ keypress: getch, cin.get?

C++ keypress: getch, cin.get?

本文关键字:cin get getch keypress C++      更新时间:2023-10-16

我有一个在循环中运行的Win32程序。我希望能够在等待按键时暂停该程序。我使用"任意键"还是特定键并不重要,但我需要在按下某个键之前冻结程序。

我不知道该用哪个命令。我使用的是Visual C++,编译器无法识别以下任何命令:

cin.get()
std::cin.get()
getch()

我对C++还比较陌生。我知道在控制台应用程序中,这是一个相当简单的操作(cin.get(,但在Win32中可能会更困难。任何简单的解决方案或变通方法都将不胜感激。该程序是为在单个科学实验中使用而定制的,所以目前我并不担心解决方案是否有点糟糕(!(

如果我的问题遗漏了任何重要信息,我深表歉意。

两者都不应该使用。

你应该使用

#include <iostream>
...
int main()
{
   ... 
   std::cin.ignore(); //why read something if you need to ignore it? :)
}'

这是文档

示例:

#include <iostream>
#include <conio.h>
int main()
{
  std::cout << "Press any key to continue . . ." << std::endl;
  _getch(); // wait for keypress
}

_getch()是C++等价于C getch()

尝试

#include <iostream>
using namespace std;
char temp;
cin >> temp;

假设您正在为getch寻找一个替代方案(它不会回显到屏幕(。

如果您使用的是windows和visualstudio,请尝试使用_getch。这是它的链接http://msdn.microsoft.com/en-us/library/078sfkak(v=VS.100(.aspx

您应该使用#include <iostream>std::cin.get();

我认为getch()是一个C函数,但由于您使用的是C++,那么cin会更合适。

HWND hwnd = ::GetConsoleWindow();
while (!((::GetForegroundWindow() == hwnd) &&
        ((::GetKeyState(VK_SPACE) & 0x8000) != 0)))
    ::Sleep(0);

假设这不是最好的方法,但它解决了我的问题。将VK_SPACE替换为您喜欢的任何其他值。而且它是不可移植的。