如何在侦听C语言中的用户输入的同时运行程序?

一木

我正在尝试制作一个可以继续运行直到按下某个键的游戏,然后它应该将其拿进去并对其进行操作,然后继续正常运行。我该怎么做呢?

我在使用MAC,因此即使遇到了一个名为conio.h的Windows库,该库可以使用kbhit()和getch()来处理此问题,但我无法使其正常工作...

//
//  main.c
//  conioTesting
//
//

#include <stdio.h>
#include "myconio_mac.h"

int main(int argc, const char * argv[]) {

    int counter = 0;

    while (counter < 2) {
        if (kbhit()) {
            char key = getch();
            printf("\n Key is %c \n", key);
            printf("Keyboard hit detected \n");
        } else {
            printf("Nothing. \n");
        }
    }
    printf("Passed!!!!!!!!!! \n");
}
用户名

在MAC上,您需要弄乱终端设置以关闭线路缓冲。(您也可以关闭echo。)正确设置了终端之后,就可以用来read从键盘上获取单个字符。

在下面的示例代码中,该kbsetup功能负责终端设置。getkey功能检查是否有按键按下,并返回按键(如果有)或未'\0'读取任何按键。main函数具有一个循环,该循环每秒打印一次时间,并打印用户按下的任何键。'q'退出程序。

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <time.h>
#include <termios.h>
#include <unistd.h>

static struct termios oldSettings;

void kbcleanup( void )
{
    tcsetattr( 0, TCSAFLUSH, &oldSettings );     /* restore old settings */
}

void kbsetup( void )
{
    tcgetattr( 0, &oldSettings );

    struct termios newSettings = oldSettings;

    newSettings.c_lflag &= ~ICANON;   /* disable line-at-a-time input */
    newSettings.c_lflag &= ~ECHO;     /* disable echo */
    newSettings.c_cc[VMIN]  = 0;      /* don't wait for characters */
    newSettings.c_cc[VTIME] = 0;      /* no minimum wait time */

    if ( tcsetattr( 0, TCSAFLUSH, &newSettings ) == 0 ){
        atexit( kbcleanup );    /* restore the terminal settings when the program exits */
    } else {
        fprintf( stderr, "Unable to set terminal mode\n" );
        exit( 1 );
    }
}

int getkey( void )
{
    char c;

    if ( read( STDIN_FILENO, &c, 1 ) == 0 )
        return '\0';
    else
        return c;
}

int main( void )
{
    int c;

    kbsetup();

    time_t start = time( NULL );
    time_t previous = start;
    for (;;)
    {
        usleep( 1000 );
        time_t current = time( NULL );

        if ( current != previous )
        {
            fprintf( stderr, "tick %3ld\r", current - start );
            previous = current;
        }
        else if ( (c = getkey()) != '\0' )
        {
            if ( c == 'q' || c == 'Q' )
                break;
            printf( "\ngot char: 0x%02x", c );
            if ( isprint( c ) )
                printf( " '%c'", c );
            printf( "\n" );
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在启动时运行程序?

来自分类Dev

如何在启动时运行程序?

来自分类Dev

如何在启动时运行程序?

来自分类Dev

如何在构建/发布失败时运行程序?

来自分类Dev

我如何在仍允许用户输入控制台的同时运行NSTimer?

来自分类Dev

如何在C语言中扫描数组的各个部分寻找匹配的用户输入

来自分类Dev

如何设置用户在C语言中输入字符的时间限制?

来自分类Dev

C 语言中的 Shell - 如何读取和执行用户输入?

来自分类Dev

如何在Java中使用线程池执行程序同时运行单个Java应用程序两次

来自分类Dev

如何在不同用户的帐户下运行程序?

来自分类Dev

如何在不同用户的帐户下运行程序

来自分类Dev

如何在启动时运行程序,将其最小化?

来自分类Dev

带有Xmonad的Ubuntu-如何在启动时运行程序

来自分类Dev

如何在 FreeBSD 上配置 devd 以在连接 USB 键盘时运行程序?

来自分类Dev

如何在启动时运行程序,将其最小化?

来自分类Dev

如何使用python在启动时运行程序

来自分类Dev

如何从终端输入(Linux)运行程序?

来自分类Dev

如何限制一个用户同时运行一个程序?

来自分类Dev

c# - 如何从Windows运行的程序(在Windows启动时运行)诊断用户运行的程序?

来自分类Dev

如何在不断检查输入-线程的同时运行后台过程?

来自分类Dev

如何在不断检查输入-线程的同时运行后台过程?

来自分类Dev

如何在GDB模式下传递输入数据以进行C编程。已传递的参数和运行程序

来自分类Dev

如何在序言中控制用户输入?

来自分类Dev

如何在序言中控制用户输入?

来自分类Dev

是否可以使用发送键创建vbscript文件并同时运行程序以执行?

来自分类Dev

如何在MacBook上同时运行两个python程序?

来自分类Dev

如何在Kivy应用程序中同时运行Clock.schedule_interval实例?

来自分类Dev

C语言中用户输入数组的频率分析问题

来自分类Dev

C语言中的用户输入和动态内存分配

Related 相关文章

  1. 1

    如何在启动时运行程序?

  2. 2

    如何在启动时运行程序?

  3. 3

    如何在启动时运行程序?

  4. 4

    如何在构建/发布失败时运行程序?

  5. 5

    我如何在仍允许用户输入控制台的同时运行NSTimer?

  6. 6

    如何在C语言中扫描数组的各个部分寻找匹配的用户输入

  7. 7

    如何设置用户在C语言中输入字符的时间限制?

  8. 8

    C 语言中的 Shell - 如何读取和执行用户输入?

  9. 9

    如何在Java中使用线程池执行程序同时运行单个Java应用程序两次

  10. 10

    如何在不同用户的帐户下运行程序?

  11. 11

    如何在不同用户的帐户下运行程序

  12. 12

    如何在启动时运行程序,将其最小化?

  13. 13

    带有Xmonad的Ubuntu-如何在启动时运行程序

  14. 14

    如何在 FreeBSD 上配置 devd 以在连接 USB 键盘时运行程序?

  15. 15

    如何在启动时运行程序,将其最小化?

  16. 16

    如何使用python在启动时运行程序

  17. 17

    如何从终端输入(Linux)运行程序?

  18. 18

    如何限制一个用户同时运行一个程序?

  19. 19

    c# - 如何从Windows运行的程序(在Windows启动时运行)诊断用户运行的程序?

  20. 20

    如何在不断检查输入-线程的同时运行后台过程?

  21. 21

    如何在不断检查输入-线程的同时运行后台过程?

  22. 22

    如何在GDB模式下传递输入数据以进行C编程。已传递的参数和运行程序

  23. 23

    如何在序言中控制用户输入?

  24. 24

    如何在序言中控制用户输入?

  25. 25

    是否可以使用发送键创建vbscript文件并同时运行程序以执行?

  26. 26

    如何在MacBook上同时运行两个python程序?

  27. 27

    如何在Kivy应用程序中同时运行Clock.schedule_interval实例?

  28. 28

    C语言中用户输入数组的频率分析问题

  29. 29

    C语言中的用户输入和动态内存分配

热门标签

归档