C ++: выполнить цикл while до нажатия клавиши, например, Esc?

У кого-нибудь есть фрагмент кода, который не использует windows.h чтобы проверить нажатие клавиши в течение цикла. В основном этот код, но без использования 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;
}

7

Решение

Лучше всего создать пользовательскую функцию «GetAsyncKeyState», которая будет использовать #IFDEF для окон и Linux для выбора соответствующего GetAsyncKeyState () или его эквивалента.

Другого пути для достижения желаемого результата не существует, у подхода cin есть свои проблемы — например, приложение должно быть в фокусе.

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;
}
4

char c;
while (cin >> c) {
...
}

ctrl-D завершает вышеуказанный цикл. Это будет продолжаться до тех пор, пока введен символ.

2

// простейшие.

    #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;
}
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;
}
-1
По вопросам рекламы [email protected]