我正在 Windows 计算机上的 cygwin 中编译并执行我的程序。我对 C 非常缺乏经验,但我想要一种方法来检测是否按下了某个键而不提示用户(例如我)。我的具有所需功能的伪代码如下所示。
char ch;
while(1){
if(KeyBeenPressed()){
//a key has been pressed before getting here
ch=getKeyPressed();
if(ch=='0'){
printf("you have pressed 0");
}
else{
printf("you did't press key 0");
}
}
//do other stuff
}
我自己在网上搜索后尝试解决这个问题如下所示。
#include <stdio.h>
#include <conio.h>
char ch;
void main(){
while(1){
if(kbhit()){ //kbhit is 1 if a key has been pressed
ch=getch();
printf("pressed key was: %c", ch);
}
}
}
这段代码的一个问题是找不到 conio.h 文件(而且我还没有找到任何其他方法来解决这个问题)。显然 gcc 编译器无法处理 conio.h(我已附上它的链接)。http://www.programmingsimplified.com/c/conio.h
所以我想知道你们中是否有人知道一种方法来检测 C 中是否按下了某个键,我还想最好以字符形式检索按下的键(我计划在此应用程序中使用 0-9)。重要的是程序不能等到按下某个键。
我感谢任何可以解决此问题的建议!
此致
亨里克
我使用以下函数kbhit()
。它在 Ubuntu 中的 g++ 编译器上运行良好。
#include <termios.h>
#include <unistd.h>
#include <fcntl.h>
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;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)