各位同学,大家好!相信大家在学习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中预处理好的转义字符打印出来,一次打印颜色一次恢复原样就可以做到设置颜色的效果。
什么是预处理?下次单独讲。
完