C语言中getch()函数详解及简单实例

C语言中getch()函数详解及简单实例

前言:

这个函数是一个不回显函数,当用户按下某个字符时,函数自动读取,无需按回车,有的C语言命令行程序会用到此函数做游戏,但是这个函数并非标准函数,要注意移植性!

所以有这样的一个接口,那就很牛逼了,至少可以做个游戏来玩下,结合ASCII码,很容易写个方向键控制的2048或者贪吃蛇等等有趣的游戏出来。

以下是以一个简单的例子:

你会发现当你按下对应的按键的时候就会打印相应的语句。

#include <stdio.h>
#include <fcntl.h>
#include <stdlib.h>
#include <conio.h>
#define ESC       0x1B
#define ENTER      0x0D
#define SPACE      0x20
#define KEY_UP     72  //上
#define KEY_DOWN    80  //下
#define KEY_LEFT    75  //左
#define KEY_RIGHT    77  //右 

int KEY_EXIT_STATU = 0 ;
int KEY_ENTER_STATU = 0 ;
int KEY_SPACE_STATU = 0 ;  

int KEY_UP_STATU =   0 ;
int KEY_DOWN_STATU =  0 ;
int KEY_LEFT_STATU =  0 ;
int KEY_RIGHT_STATU = 0 ;  

char ch ;  

int get_value() ;
int main(void)
{ 

  int i = 0;
  while(1)
  {
    get_value();
  }
  return 0 ;
} 

int get_value()
{
  ch = getch() ;
  system("cls");
  switch(ch)
  {
      case ESC : KEY_EXIT_STATU = 1 ;
            printf("退出\n") ; break ;
      case ENTER :KEY_ENTER_STATU = 1 ;
            printf("回车\n") ; break ;
      case SPACE :
            KEY_SPACE_STATU = 1 ;
            printf("空格\n") ; break ;
      case KEY_UP:case 'w' :
            KEY_UP_STATU = 1 ;
            printf("上\n") ; break ;
      case KEY_DOWN:case 's' :
            KEY_DOWN_STATU = 1 ;
            printf("下\n") ; break ;
      case KEY_LEFT:case 'a' :
            KEY_LEFT_STATU = 1 ;
            printf("左\n") ; break ;
      case KEY_RIGHT:case 'd':
            KEY_RIGHT_STATU = 1 ;
            printf("右\n") ; break ;
  }
}

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

(0)

相关推荐

  • C语言中getch()函数详解及简单实例

    C语言中getch()函数详解及简单实例 前言: 这个函数是一个不回显函数,当用户按下某个字符时,函数自动读取,无需按回车,有的C语言命令行程序会用到此函数做游戏,但是这个函数并非标准函数,要注意移植性! 所以有这样的一个接口,那就很牛逼了,至少可以做个游戏来玩下,结合ASCII码,很容易写个方向键控制的2048或者贪吃蛇等等有趣的游戏出来. 以下是以一个简单的例子: 你会发现当你按下对应的按键的时候就会打印相应的语句. #include <stdio.h> #include <fcnt

  • C++ 中回调函数详解及简单实例

    C++ 中回调函数详解及简单实例 回调函数调用关系图 对于第一种情况,主程序可以从执行到回调函数,也可以不执行回调函数,关键看宿主函数是否调用了回调函数. 对于第二种情况,主程序可以从执行到回调函数,也可以不执行回调函数,关键看宿主函数是否调用了回调函数.主程序不知道宿主函数什么时候调用回调函数,因为调用函数启动了线程,这样,主程序就不必关心宿主函数什么时候调用回调函数了,主程序可以释放出来做自己的事了. 代码示例 #include <stdio.h> typedef void(*lpFunc

  • R语言中merge函数详解

    1.创建测试数据: name <- c('A','B','A','A','C','D') school <- c('s1','s2','s1','s1','s1','s3') class <- c(10, 5, 4, 11, 1, 8) English <- c(85, 50, 90 ,90, 12, 96) w <- data.frame(name, school, class, English) w name <- c('A','B','C','F') school

  • linux 中open()函数详解及简单实例

    open()函数创建文件时便捷的权限设置 头文件 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> 函数原型 int open( const char * pathname, int flags); int open( const char * pathname,int flags, mode_t mode); 当flags参数包含O_REEAT时,需要对mode参数进行指定 S_IRWXU,

  • 关于易语言中“如果”命令详解

    本命令根据提供的逻辑参数的值,来决定是否改变程序的执行位置,如果提供的逻辑参数值为真,程序继续顺序向下执行,否则跳转到左侧箭头线指向的命令处去执行. 语法: 无返回值 如果 (条件) 参数名 描 述 条件 必需的: 逻辑型.本条件值的结果决定下一步程序执行位置. 说明: 如果命令的条件参数必须为逻辑型,可以为一个或多个逻辑型条件语句组成,多个逻辑型条件语句之间可以用"或"或者"且"连接, 如果符合如果编辑框.内容 = "你好易语言"的条件,就执行

  • 易语言中“取错误码”命令详解

    如果执行某数据库命令失败,在其后执行本命令可以取回非 0 的数据库错误码值.如果该数据库命令执行成功,执行本命令将返回 0 . 语法: 整数型 取错误码 () 例程: 说明: 首先把要操作的数据库打开,然后执行"写()"命令,程序将改写"改写字段编辑框"中输入的字段,改写内容为"改写内容编辑框"中的内容.如果改写成功,会弹出信息框显示"写入数据成功":如果改写失败,会弹出信息框提示失败,将本次操作的错误码和错误信息取出,并显示

  • 微信小程序中input标签详解及简单实例

    微信小程序中input标签详解及简单实例 使用input标签,我们都会,在微信小程序中使用,必定也是可以一下子就会的,但是却有些常用的属性无法按照习惯去使用: 我就用我最常用的来做例子: 一个一个来解读: 首先,我是定义了他的id,这是我们最常用的,所以就配了一个id,毕竟不操作他,又为什么设成输入框呢, 第二,设置他的样式, 第三,设置他的输入类别,以上都是很简单的 第四.使用正则l:哎限定输入为纯数字.这点可能有点不理解,这是对他的keyup事件监听,将不是纯数字的list无视掉.注意,是对

  • linux 下实现sleep详解及简单实例

    linux 下实现sleep详解及简单实例 sleep: 普通版本 1.基本设计思路: 1>注册SIGALRM信号的处理函数:    2>调用alarm(nsecs)设定闹钟: 3>调⽤pause等待,内核切换到别的进程运行: 4>nsecs秒之后,闹钟超时,内核发SIGALRM给这个进程 ; 5>从内核态返回这个进程的⽤户态之前处理未决信号,发现有SIGALRM信号,其处理函数是sig_alrm; 6> 切换到用户态执行sig_alrm函数,进⼊sig_alrm函数时

  • C++对象的浅复制和深复制详解及简单实例

    C++对象的浅复制和深复制详解及简单实例 浅复制:两个对象复制完成后共享某些资源(内存),其中一个对象的销毁会影响另一个对象 深复制:两个对象复制完成后不会共享任何资源,其中一个对象的销毁不会影响另一个对象 下面我们来看一段代码,以便直观的理解: #include<iostream> #include<string.h> using namespace std; class Student { int no; char *pname; public: Student(); Stud

  • Linux中多线程详解及简单实例

    Linux中多线程详解及简单实例 1.概念 进程:运行中的程序. 线程:一个程序中的多个执行路径.更准确的定义是:线程是一个进程内部的一个控制序列. 2.为什么要有线程? 用fork调用进程代价太高,需要让一个进程同时做多件事情,线程就非常有用. 3.线程的优点和缺点. 优点: (1)有时,让程序看起来是在同时做两件事是非常有用的. 比如在编辑文档时,还能统计文档里的单词个数. (2)一个混杂着输入.计算.输出的程序,利用线程可以将这3个部 分分成3个线程来执行,从而改变程序执行的性能. (3)

随机推荐