对于窗口组件菜单,需要根据不同平台,通过图形编程接口,进行菜单的编制。
例程:
#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=1i<=100i++)
{
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=0n<kn++)
if(a[n]==b[0])
{
j++ /*记录相同的字符数*/
do
{
if(a[++n]==b[++t])
{
j++
if(j==m)
{
l++/*子字符串相同数*/
j=0/*判断后相同字符数归零*/
t=-1/*判断中if中++tt将会归零*/
}
}
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")
}
#include <stdio.h>#include <stdlib.h>
void menu() //菜单绘制
{
printf("---------------------------------------\n")
printf("\t\t 0.退出\n")
printf("\t\t 1.录入信息\n")
printf("\t\t 2.查找信息\n")
printf("\t\t 3.删除信息\n")
printf("\t\t 4.浏览信息\n")
printf("\t\t 5.有其他疑问找群主")
printf("\t\t 6.C++8群: 491994603")
printf("---------------------------------------\n")
}
void keyDown() //按键处理
{
int choice
scanf("%d", &choice)
switch (choice)
{
case 0:
printf("退出程序\n")
Sleep(2000)
return 0
case 1:
//调用菜单1实现函数
break
case 2:
//调用菜单2实现函数
break
case 3:
//调用菜单3实现函数
break
case 4:
//调用菜单4实现函数
break
default:
printf("输入错误\n")
}
system("pause")
return 0
}
int main()
{
while(1)
{
menu()
keyDown()
system("cls")
}
return 0
}
#include<stdio.h>#include<string.h>
#include<stdlib.h>
//值传递
void fun1(char a)
{
a = 'b'
}
//地址传递
char fun2(char* a)
{
*a = 'a'
return *a
}
//动态分配数组
void fun3(char*& a)
{
a = (char*)malloc(sizeof(char))
}
char caidan()
{
char choose[5]
printf("\n***************************************\n")
printf(" ┌──────┐\n")
printf(" │ 菜单│\n")
printf(" __________________________________\n")
printf("│ 1,按值传递 |\n")
printf("│ 2,按地址传递 |\n")
printf("│ 3,动态数组演示|\n")
printf("│ 4,退 出 |\n")
printf("└────────────────┙\n")
printf("**************************************\n\n")
do
{
printf("请输入您的选择(1-4):")
scanf("%s",choose)
}while(strcmp(choose,"1")&&strcmp(choose,"2")&&strcmp(choose,"3")&&strcmp(choose,"4"))
//返回选择的菜单,注意如果输入太长 这里会异常,因为choose[5],只申请了5个字节。
return choose[0]
}
void main()
{
//执行菜单的选择
while(1)
{
switch(caidan())
{
case '1':
{
char a = 'a'
fun1(a)
//按值传递 内容不变
break
}
case '2':
{
char b = 'b'
char a = fun2(&b)
//按地址传递内容会变
break
}
case '3':
{
char* p = NULL
fun3(p)
//动态数组分配成功
break
}
case '4':exit(0)
}
}
}