我有一个程序,如下所示:
#include<iostream>
using namespace std;
int main()
{
while(true)
{
//do some task
if(Any_key_pressed)
break;
}
return 0;
}如果按下任何键,如何退出循环。
C++ Compiler: GCC 4.2 and higher
OS: Linux-Mint谢谢
发布于 2014-02-12 01:18:12
标准C++不提供这样做的方法。您将需要一个特定于平台的API来告诉您某个键是否被按下(或者输入可能在stdin上可用),而不会阻塞。这意味着你需要告诉我们你使用的是哪种平台。
发布于 2014-02-12 01:45:49
试试这个:
#include <iostream>
#include <stdio.h>
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
using namespace std;
int kbhit(void)
{
struct termios oldt, newt;
int ch;
int oldf;
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ICANON | ECHO);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
oldf = fcntl(STDIN_FILENO, F_GETFL, 0);
fcntl(STDIN_FILENO, F_SETFL, oldf | O_NONBLOCK);
ch = getchar();
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
fcntl(STDIN_FILENO, F_SETFL, oldf);
if(ch != EOF)
{
ungetc(ch, stdin);
return 1;
}
return 0;
}
int main(void)
{
while(!kbhit());
cout<<"You pressed "<<(char)getchar();
return 0;
}发布于 2014-02-12 03:12:43
您可以使用SDL,它(大部分)是独立于平台的。
#include<SDL/SDL.h>
...
#include<iostream>
using namespace std;
int main()
{
while(true)
{
//do some task
SDL_Event event
while(SDL_PollEvent(&event))
{
if(event.type==SDL_KEYDOWN)
{
break;
}
}
}
return 0;
}上面的代码适用于Windows,Linux,MacOS以及其他一些OSes。至于如何设置SDL,有一个tutorial。
https://stackoverflow.com/questions/21708564
复制相似问题