gpt4 book ai didi

c - 有没有办法检测是否按下了某个键?

转载 作者:可可西里 更新时间:2023-11-01 11:30:16 26 4
gpt4 key购买 nike

我正在 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;
}

关于c - 有没有办法检测是否按下了某个键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22166074/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com