简体   繁体   中英

C++ keypress: getch, cin.get?

I have a Win32 program that runs on a loop. I would like to be able to pause that program while awaiting a keypress. It doesn't matter whether I use 'any key' or a specific key, but I need to have the program freeze until I press something.

I am wondering which command I should use. I am working with Visual C++ and the compiler doesn't recognise any of the following commands:

cin.get()

std::cin.get()

getch()

I am relatively new to C++. I understand that in a console app this is a fairly simple action to take (cin.get), but that it can be more difficult in Win32. Any simple solution or workaround would be appreciated. The program is bespoke to be used in a single scientific experiment, so for now I'm not fussed if the solution is a little botchy(!)

Apologies if I've missed any important info from my question.

You should use neither.

You should use

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

Here's the documentation

Example:

#include <iostream>
#include <conio.h>

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

_getch() is C++ equivalent to C getch()

Try

#include <iostream>

using namespace std;

char temp;
cin >> temp;

Assuming that you are looking for an alternative for getch ( which does not echo to screen).

If you are using windows and visual studio to be precise try using _getch. Here is a link to it http://msdn.microsoft.com/en-us/library/078sfkak(v=VS.100).aspx

You should #include <iostream> and use std::cin.get();

I think the getch() is a C function, but since you are using C++, then the cin would be more appropriate.

HWND hwnd = ::GetConsoleWindow();

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

Suppose it is not the best way but it solved my problem. Replace VK_SPACE with any other value you like. And it is not portable.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM