有没有人有不使用windows.h
来检查while循环中的按键的代码片段?基本上是这个代码,但不需要使用windows.h
来做它。我想在Linux和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;
}
#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;
}
你最好的办法是创建一个自定义的"GetAsyncKeyState"函数,它将在windows和linux上使用#IFDEF来选择合适的GetAsyncKeyState()或等效的方法。
没有其他方法可以达到预期的结果,cin方法有它的问题-例如应用程序必须处于焦点
char c;
while (cin >> c) {
...
}
ctrl-D
终止上述循环。
//最简单的。
#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;
}
//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;
}