標籤:調試 檔案中 字元 沒有 為我 位置 變數 printf --
編寫許多軟體都需要有菜單,那麼如果我們使用tc之類的軟體來編譯器的話,我們該怎麼編寫菜單呢?讓我們一起來試試吧!
第一步:簡單例子
我們先來寫個最簡單的例子:
#include<stdio.h>/*包含輸入輸出標頭檔*/
int a;/*定義一個變數a,來作為menu的傳回值*/
int menu_a; /*定義一個變數menu_a,來作為menu中輸入數的變數*/
int menu()/*菜單函數*/
{
printf("1 menu1 2 menu2 3 exit \n");/*在螢幕上輸出雙引號裡面的內容*/
scanf("%d",& menu_a);/*讓使用者輸入一個數,並把它儲存到變數a中*/
return(menu_a);/*把輸入的數a作為函數的傳回值*/
}
void main() /*主函數*/
{
a=menu(); /*包含輸入輸出標頭檔*/
printf("you choose is %d",a); /*輸出資訊,你也可以根據需要在這裡對菜單進行判斷*/
getch(); /*等待按鍵輸入*/
}
運行之後並進行選擇,你應該可以看到如下的畫面:
第二步:美化
可是,大家會說:“現在都是什麼年代了,怎麼還用這種菜單啊!”所以我們要來美化我們的菜單。我們修改一下menu(),代碼如下:
int menu()
{
printf(" --My solfwave-- \n\n");
printf(" %c menu1\n",4);
printf(" menu2\n");
printf(" exit\n");
scanf("%d",& menu_a);
return(menu_a);
}
這裡我們只是簡單的調整一下,讓菜單顯示得更漂亮一點點,其中的的二個printf的%c是調用後面參數對應的ASCII碼的字元,這裡參數為4,對應的字元為一個菱形。運行後的效果如:
第三步:鍵盤響應
在bios.h標頭檔中有一個bioskey函數,可以判斷我們的按鍵。比如當我們按下鍵盤的“上”的時候它的傳回值為18432,按鍵盤的“下”的時候傳回值為20480,其他鍵的傳回值我們可以從網上搜尋到。
我們先包含以下檔案
#include <bios.h>
我們要讓菜單的第一個選項為預設選項,所以我們在定義menu_a的同時給它賦值1.
int menu_a=1;
修改後的menu()如下:
int menu()
{
printf(" --My solfwave-- \n\n");
printf(" %c menu1\n",4);
printf(" menu2\n");
printf(" exit\n");
while("")/*添加一個無限迴圈*/
{
if(bioskey(0)==18432&&menu_a>1)
{menu_a-=1; printf("%d",menu_a);}
/*如果鍵盤上,“上”被按下,而且menu_a 在按“上”後有反應的菜單上時(也就是在第二、第三個菜單)menu_a 減小1(相當於預設菜單向上移動),最後我們把菜單數顯示出來,以便我們清晰地瞭解*/
else if(bioskey(0)==20480&&menu_a<3)
{menu_a+=1; printf("%d",menu_a);}
/*如果鍵盤上,“下”被按下,執行相應地操作*/
}
/* 本來這裡有句return(menu_a),但這句其實不會被執行,因為程式會在迴圈中被卡住*/
}
程式運行後,你應該可以看到如下效果:(最後一行的2321會根據你按鍵次序的不同而不同)
第四步:棱形“游標”
接下來我們就要讓在menu前面的棱形會上下移動了。
因為我們會用到clrscr清屏函數,因此我們還需要包含標頭檔conio.h代碼如下:
#include<conio.h>
我們修改一下menu中while(“”){}裡面的內容,修改如下:
while("")
{
if(bioskey(0)==18432&&menu_a>1)
menu_a-=1; /*以前這句後面的printf只是為了方便我們調試,現在已經沒有作用了,把它刪去*/
else if(bioskey(0)==20480&&menu_a<3)
menu_a+=1;
clrscr(); /*清空螢幕*/
switch(menu_a) /*判斷menu_a的值*/
{
case 1: /*如果menu_a的值是1,也就是棱形游標在第一個菜單的時候*/
printf(" --My solfwave-- \n\n"); /*重新顯示螢幕內容,把棱形放在第一個菜單的位置*/
printf(" %c menu1\n",4);
printf(" menu2\n",4);
printf(" exit\n",4);
break;
case 2:
printf(" --My solfwave-- \n\n"); ;/*重新顯示螢幕內容,把棱形放在第二個菜單的位置*/
printf(" menu1\n",4); ;/*重新顯示螢幕內容,把棱形放在第三個菜單的位置*/
printf(" %c menu2\n",4);
printf(" exit\n",4);
break;
case 3:
printf(" --My solfwave-- \n\n");
printf(" menu1\n");
printf(" menu2\n");
printf(" %c exit\n",4);
break;
}
運行之後,我們就可以通過鍵盤來選擇菜單了,如所示:
第五步:響應事件
我們要讓當我們按下斷行符號的時候,程式退出menu函數並給出相應傳回值(當我們按下鍵盤的斷行符號的時候bioskey(0)的傳回值是7181)我們修改一下menu()裡面while(“”){}裡的一小段代碼:
if(bioskey(0)==18432&&menu_a>1)
menu_a-=1;
else if(bioskey(0)==20480&&menu_a<3)
menu_a+=1;
else if(bioskey(0)==7181)
return(menu_a);
這裡我們添加多一個判斷,當鍵盤中的斷行符號被按下時,退出函數menu()並把menu_a作為傳回值。
感言
學習各類軟體或者遊戲的製作,菜單是其中必不可少的一部分,希望大家在學習中再接再厲。當然,本教程只是一個執行個體,你可以自己做出更漂亮,功能更強大的菜單。
羅培羽—C語言簡單遊戲編程教學