我在Visual C中开发这个uni项目阶段时遇到了问题。我想知道你是否能帮我解决一下这个问题。 在这个阶段,我们必须建立它的菜单,包括这五个子菜单:
我们的导航政策:使用向上和向下按钮滚动浏览这5个项目(箭头)
我们用enter输入子菜单,当我们进入子菜单时,我们应该再次通过Enter返回
Esc帮助我们退出该计划!
好的!我的问题是第二部分,我不能通过Enter从子菜单回来!
这是我的代码:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int m1(int n);
int m2(int n);
int m3(int n);
int m4(int n);
int m5(int n);
int a(int n);
char c,x,y;
int i=1;
int main(){
K: printf("-->Continue last game...\nSingle player\nOptions\nCredits\nTop scores");
while(1){
c=getch();
if (c!=13&&c!=27&&c!=-32) {continue;}
if (c==13) {a(i); L:c=getch(); if (c==13) {system("cls");goto K;} else goto L;}
if (c==27) {system("cls");printf("Press eny key to Exit...");y=getch();break;}
x=getch();
if (c==-32&&x==72&&i!=1) (i--); else if (c==-32&&x==72&&i==1) i=5;
if (c==-32&&x==80&&i!=5) (i++); else if (c==-32&&x==80&&i==5) i=1;
switch (i){
case 1:
system("cls");
m1(i);
break;
case 2:
system("cls");
m2(i);
break;
case 3:
system("cls");
m3(i);
break;
case 4:
system("cls");
m4(i);
break;
case 5:
system("cls");
m5(i);
break;
}}
return 0;
}
int m1(int n){
printf("-->Continue last game...\nSingle player\nOptions\nCredits\nTop scores");
return i;
}
int m2(int n){
printf("Continue last game...\n-->Single player\nOptions\nCredits\nTop scores");
return i;
}
int m3(int n){
printf("Continue last game...\nSingle player\n-->Options\nCredits\nTop scores");
return i;
}
int m4(int n){
printf("Continue last game...\nSingle player\nOptions\n-->Credits\nTop scores");
return i;
}
int m5(int n){
printf("Continue last game...\nSingle player\nOptions\nCredits\n-->Top scores");
return i;
}
int a(int n){
switch (i){
case 1: {system("cls");printf("you've chosen \"Continue last game...\" \n\n\n\n\n\n\n\n press Enter to return to main menu");} break;
case 2: {system("cls");printf("you've chosen \"single player\" \n\n\n\n\n\n\n\n press Enter to return to main menu");}break;
case 3: {system("cls");printf("you've chosen \"Options\" \n\n\n\n\n\n\n\n press Enter to return to main menu");}break;
case 4:{system("cls");printf("you've chosen \"Options\" \n\n\n\n\n \tLord.Pooria Rajabzadeh (EiNsTEiN.co(class of 2000))\n\tProducer: Pooria on 15 dec 2011\n\n press Enter to return to main menu");}break;
case 5: {system("cls");printf("you've chosen \"Top scores\" \n\n\n\t Pooria 100\n\tAkbar 80\n\tAli 60\n\n\n press Enter to return to main menu");}break;
return i;}
}
答案 0 :(得分:3)
考虑以下几点:
A()
中调用函数B()
,则在A()
中执行代码后,默认程序流将在B()
中恢复。main()
中选择菜单项会调用显示其自己的项目列表的另一个功能submenu()
会怎样?如果您完成执行submenu()
并在用户点击Enter键时返回main()
,程序流程中会发生什么情况?)使用单独的函数来表示子菜单是一种可行的解决方案,但它可能不是最佳实践。在每个函数中有很多复制和粘贴来处理菜单“机制”(显示基本菜单,指示突出显示的选项等),这可能导致修复错误和维护此代码的问题 - 如果存在错误如何显示一个菜单,您必须完成您创建的所有菜单功能并修复每个菜单中的错误。
如果您希望将其整合为更紧凑和可维护的方法,您可能需要考虑一些事项:
如何构建一个显示这种List对象并与之交互的函数?