? ? ? ?各位同學,大家好!相信大家在學習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中預處理好的轉義字符打印出來,一次打印顏色一次恢復原樣就可以做到設置顏色的效果。
什么是預處理?下次單獨講。
完