對於窗口組件菜單,需要根據不同平臺,通過圖形編程接口,進行菜單的編制。
例程:
#include<stdio.h>?#include<graphics.h>?
#include<conio.h>?
void?main()?
{?
char?str;?
int?i,k,choice=1;?
int?gd=DETECT,gm;?
initgraph(&gd,&gm,"?");?
setbkcolor(2);?
settextstyle(3,0,3);?
outtextxy(140,120,"A.?The?Mock?Clock.");?
outtextxy(140,150,"B.?The?Digital?Clock.");?
outtextxy(140,180,"C.?Exit.");?
setlinestyle(0,0,3);?
rectangle(170,115,370,145);?
/*按上下鍵選擇所需選項*/?
for(i=1;i<=100;i++)?
{?
str=getch();?
if(str==72)?
{?
--choice;?
if(choice==0)choice=3;?
}?
if(str==80)?
{?
++choice;?
if(choice==4)choice=1;?
}?
if(str==13)break;?/*按回車鍵確認*/?
/*畫圖做菜單*/?
cleardevice();?
switch(choice)?
{?case?1:?setlinestyle(0,0,3);?
rectangle(170,115,400,145);?
settextstyle(3,0,3);?
outtextxy(140,120,"A.?The?Mock?Clock.");?
settextstyle(3,0,3);?
outtextxy(140,150,"B.?The?Digital?Clock.");?
outtextxy(140,180,"C.?Exit.");?
break;?
case?2:?setlinestyle(0,0,3);?
rectangle(170,145,400,175);?
settextstyle(3,0,3);?
outtextxy(140,120,"A.?The?Mock?Clock.");?
settextstyle(3,0,3);?
outtextxy(140,150,"B.?The?Digital?Clock.");?
settextstyle(3,0,3);?
outtextxy(140,180,"C.?Exit.");?
break;?
case?3:?settextstyle(3,0,3);?
outtextxy(140,120,"A.?The?Mock?Clock.");?
outtextxy(140,150,"B.?The?Digital?Clock.");?
settextstyle(3,0,3);?
outtextxy(140,180,"C.?Exit.");?
setlinestyle(0,0,3);?
rectangle(170,175,400,205);?
break;?
}?
}?
if(i>=100)exit(0);/*如果按鍵超過100次退出*/?
switch(choice)/*這裏引用函數,實現所要的功能*/?
{?
case?1:?cleardevice();?
setbkcolor(4);?
settextstyle(3,0,4);?
outtextxy(160,120,"No.1?have?not?built.");?break;?
case?2:?cleardevice();?
setbkcolor(4);?
settextstyle(3,0,4);?
outtextxy(160,150,"No.2?have?not?built.");?
break;?
case?3:?exit(0);?
}?
getch();?
closegraph();?
}
對於命令行菜單,直接通過不斷刷新輸出來模擬菜單行為。
例程:
#include?<stdio.h>#include?<stdlib.h>?
#include?<string.h>
int?n,t,k;
int?m;
char?s1[20],s2[20],c;
char?**l;
char?*num[]={"one","two","three","four","five","six","seven","eight","nine","ten"};
void?menu()
{
printf("\n\n\t\t*******************************************************\n"); printf("\t\t**1.查找字符串S1中S2出現的次數**\n"); printf("\t\t**2.統計字符串中大小寫字母,數字出現的次數**\n"); printf("\t\t**3.將數字翻譯成英語?**\n"); printf("\t\t**4.結束?**\n"); printf("\t\t*******************************************************\n"); printf("\t\t?您的輸入:");fflush(stdin);
scanf("%d",&n);}
void?check()
{
char?a[20],b[20]; int?j=0,k,m,l=0; int?t=0,n=0; printf("請輸入主字符串:\n"); scanf("%s",a); k=strlen(a); printf("請輸入子字符串:\n"); scanf("%s",b); m=strlen(b); for(n=0;n<k;n++) if(a[n]==b[0]) {j++;?/*記錄相同的字符數*/
do
{
if(a[++n]==b[++t])
{?
j++; if(j==m)? { l++;/*子字符串相同數*/ j=0;/*判斷後相同字符數歸零*/ t=-1;/*判斷中if中++t;t將會歸零*/ }}
else
{
j=0; t=0; break;/*如果不同跳出while循環讓for使n+1繼續判斷*/}
}while(a[n]!='\0');/*查找完字符數組a結束*/
} printf("子字符串出現次數:\n%d\n",l);}?
void?cout()
{
int?n=0,t=0,k=0; printf("請輸入壹個字符串:\n");fflush(stdin);/*清除緩沖*/
while((c=getchar())!='\n') { if(c>='a'&&c<='z')n++;
if(c>='A'&&c<='Z')t++;
if(c>='0'&&c<='9')k++;
} printf("有大寫字母:\n%d\n",t); printf("有小寫字母:\n%d\n",n); printf("有數字:\n%d\n",k);}
void?number()
{
l=num; printf("請輸入壹個數字:(0-10)\n");fflush(stdin);
scanf("%d",&m); printf("%d對應的英文是:\n%s\n",m,*(l+m-1));}
void?main()
{
while(1) { system("cls"); menu(); switch(n) { case?1:system("cls");check();system("pause");break; case?2:system("cls");cout();system("pause");break; case?3:system("cls");number();system("pause");break; case?4:system("cls");break; default:system("cls");break;? } if(n==4)?break; } printf("感謝使用\n");}