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