gpt4 book ai didi

c - 在 C 中获取键盘中断

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:35:50 24 4
gpt4 key购买 nike

程序:

#include<stdio.h>
void main()
{
int time=1800;
while(1){
system("clear");
time-=1;
printf("%d\n",time);
sleep(1);
if(time==0)
pause();
}
}

上面的程序在时间达到 0 时停止。我的要求是在程序运行期间,如果我按空格键或任何其他键,程序会暂停,然后再次按下该键,程序会得到恢复。所以为了做到这一点,在执行之前在条件下,我们提交键盘中断的信号处理程序。在 C 中如何做到这一点。

获取键盘中断的函数是什么。我不想从用户那里得到输入,我想处理用户通过键盘产生的中断。

提前致谢..,

最佳答案

您需要 conio.h 来满足您的要求。它定义了 kbhit() 和 getch() 都等待来自键盘的输入。

每当调用 kbhit() 时,它都会检查键盘缓冲区,如果缓冲区有任何按键,则返回一个非零值,否则返回 0。

conio.h 由 MSDOS 编译器使用,不是标准 C 库 (ISO) 的一部分。它也没有在 POSIX 中定义。

#include<stdio.h>
#include<conio.h>

int main()
{
while(1)
{
while(!kbhit())
{
//works continuously until interrupted by keyboard input.
printf("M Tired. Break Me\n");
}
getch();
}
return 0;
}

对于 linux,您可以使用以下代码片段通过使用 fnctl.h 中的 fnctl() 来实现 kbhit() 以进行信号处理:

  #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 - 在 C 中获取键盘中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32390617/

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