问题
Does anyone have a snippet of code that doesn't use windows.h
to check for a key press within a while loop. Basically this code but without having to use windows.h
to do it. I want to use it on Linux and Windows.
#include <windows.h>
#include <iostream>
int main()
{
bool exit = false;
while(exit == false)
{
if (GetAsyncKeyState(VK_ESCAPE))
{
exit = true;
}
std::cout<<"press esc to exit! "<<std::endl;
}
std::cout<<"exited: "<<std::endl;
return 0;
}
回答1:
Your best bet is to create a custom "GetAsyncKeyState" function that will use #IFDEF for windows and linux to choose the appropriate GetAsyncKeyState() or equivalent.
No other way exists to achieve the desired result, the cin approach has its problems - such as the application must be in focus.
回答2:
#include <conio.h>
#include <iostream>
int main()
{
char c;
std::cout<<"press esc to exit! "<<std::endl;
while(true)
{
c=getch();
if (c==27)
break;
}
std::cout<<"exited: "<<std::endl;
return 0;
}
回答3:
char c;
while (cin >> c) {
...
}
ctrl-D
terminates the above loop. It will continue so long as a char is entered.
回答4:
//simplest.
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
char ch;
bool loop=false;
while(loop==false)
{
cout<<"press escape to end loop"<<endl;
ch=getch();
if(ch==27)
loop=true;
}
cout<<"loop terminated"<<endl;
return 0;
}
回答5:
//its not the best but it works
#include <vector>
#define WINVER 0x0500
#include <windows.h>
#include <conio.h>
#include <iostream>
int main()
{
char c;
std::cout<<"press esc to exit! "<<std::endl;
while(true)
{
std::cout<<"executing code! , if code stops press any key to continue or esc to stop"<<std::endl;
INPUT ip;
// Set up a generic keyboard event.aa
ip.type = INPUT_KEYBOARD;
ip.ki.wScan = 0; // hardware scan code for key
ip.ki.time = 0;
ip.ki.dwExtraInfo = 0;
int lol = 65; //a key
// Press the "A" key
ip.ki.wVk = lol; // virtual-key code for the "a" key
ip.ki.dwFlags = 0; // 0 for key press
SendInput(1, &ip, sizeof(INPUT));
// Release the "A" key
ip.ki.dwFlags = KEYEVENTF_KEYUP; // KEYEVENTF_KEYUP for key release
SendInput(1, &ip, sizeof(INPUT));
c=getch();
if (c==27)
break;
}
std::cout<<"exited: "<<std::endl;
return 0;
}
来源:https://stackoverflow.com/questions/15737495/c-execute-a-while-loop-until-a-key-is-pressed-e-g-esc