当前位置: 首页 > news >正文

用C语言控制键盘上的方向键

       各位同学,大家好!相信大家在学习C语言的过程中,都和我一样,经常使用scanf函数来接受字符,数字,这些标准输入信息,来实现自己设计的程序效果。

       而我突然有一天(对就是今天)我将目光放向了键盘上的方向键,因为我很好奇,它们算字符吗?能被scanf函数整除吗?我们写的程序能像正真的程序吗?你们懂我的意思对吧?我想要一个更加有互动感的程序。

在这里我会用一个表达效果简单的程序,来为你们展示我想要的互动感,我建议你们自己来写一写,因为这样的感受才会更加深刻不是吗?

接下来我们先放代码再讲:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include <conio.h>

// 定义颜色常量
#define COLOR_RESET   "\033[0m"//恢复默认值
#define COLOR_GREEN   "\033[32m"//绿色

// 设置文本颜色
void set_text_color(const char* color) 
{
    printf("%s", color);
}

// 显示菜单
void caidan(int is_truth_green, int is_adventure_green)
 {
    system("cls");  // 清屏
    if (is_truth_green) 
    {
        set_text_color(COLOR_GREEN);
    }
    printf("1.真心话\n");
    set_text_color(COLOR_RESET);

    if (is_adventure_green)
    {
        set_text_color(COLOR_GREEN);
    }
    printf("2.大冒险\n");
    set_text_color(COLOR_RESET);
}

int main() 
{
    int fangxiang = -1;
    int is_truth_green = 0;  // 标记真心话是否为绿色,初始为否
    int is_adventure_green = 0;  // 标记大冒险是否为绿色,初始为否
    
    // 首次显示菜单,无颜色
    caidan(is_truth_green, is_adventure_green);

    while (1)
     {
        fangxiang = _getch();

        if (fangxiang == 72)
             {  // 向上键
                is_truth_green = 1;  // 真心话变绿
                is_adventure_green = 0;
                
                caidan(is_truth_green, is_adventure_green);
             }
        else if (fangxiang == 80) 
            {  // 向下键
                is_truth_green = 0;
                is_adventure_green = 1;  // 大冒险变绿
               
                caidan(is_truth_green, is_adventure_green);
            }

       
    }
    return 0;
}

        在这一段代码中,关键是,_getch()函数,它是用于从控制台中无缓冲的读取单个字符的函数,它和scanf的区别在于,无缓冲,相较于scanf输入字符之后还需要按回车键,_getch()会直接,接收键值,这使得它在需要即使相应的程序中就非常重要,例如游戏中的操作键一样,怎么说比较形象呢?

        这么说吧!scnaf就像是正式运动之前会热身的成熟男子,而_getch()就像莽撞的小青年只会横冲直撞,性急,还没热身就出发了。

   if (fangxiang == 72)

       在介绍_getch()之后,我们上面这个条件判断,很简单,就是判定fangxiang是不是预定的值,而我们预定的值72,代表的什么呢?它其实就是代表着向上键,他在系统终端中就是设置好的,但不同的系统对应的值可能也是不一样的,写之前可以查一下。

        当我们明白了_getch()和相对应的键值,我们在看代码就很简单了,就是用_getch()接收按键,然后在创建一个int型变量接收它,来比较键值,再分别设置对应结果就完成了。

我在这个基础上加了点颜色。

// 定义颜色常量
#define COLOR_RESET   "\033[0m"//恢复默认值
#define COLOR_GREEN   "\033[32m"//绿色

// 设置文本颜色
void set_text_color(const char* color) 
{
    printf("%s", color);
}

        颜色函数很简单用printf函数直接将 color中预处理好的转义字符打印出来,一次打印颜色一次恢复原样就可以做到设置颜色的效果。

什么是预处理?下次单独讲。


http://www.dtcms.com/a/113708.html

相关文章:

  • LightRAG核心原理和数据流
  • Cisco Packet Tracer 8.0(新版)
  • 【神经网络】python实现神经网络(三)——正向学习的模拟演练
  • Unity插件SuperScrollView详解(进阶篇)
  • MySQL篇(五)MySQL主从同步原理深度剖析
  • 面试算法高频03-递归
  • day 8 TIM定时器
  • 第八章 Python基础进阶-数据可视化(终)
  • FfreeRTOS有阻塞作用的API
  • 12款字重国外法国风格复古报纸日历设计衬线英文字体安装包 Claire Font Family
  • docker swarm常用命令
  • python爬虫爬取淘宝热销(热门)男装商品信息(课程设计;提供源码、使用说明文档及相关文档;售后可联系博主)
  • Rust切片、结构体、枚举
  • macOS下SourceInsight的替代品
  • 前端工程化之模块化开发 webpack
  • 完整的Python程序,它能够根据两个Excel表格(假设在同一个Excel文件的不同sheet中)中的历史数据来预测未来G列数字
  • #C8# UVM中的factory机制 #S8.1.1# 多态的实现方式(三)
  • LeetCode-98. 验证二叉搜索树
  • java流程控制06:While循环
  • HeidiSQL:多数据库管理工具
  • LeeCode题库第1695题
  • 架构下的按钮效果设置
  • Linux网络套接字
  • 【C++11】lambda
  • C# WPF 命令机制(关闭CanExecute自动触发,改手动)
  • Apifox接口测试工具详细解析
  • C# 多线程并发编程基础
  • 【Block总结】PagFM,像素注意力引导融合模块|即插即用
  • 基于STM32的智能门禁系统设计与实现
  • 05-Spring Security 认证与授权机制源码解析