我在使用 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;}
}
最佳答案
考虑以下几点:
- 您有一个显示项目列表并允许您从列表中选择项目的函数。
- 如果您从函数
B()
中调用函数A()
,当您执行完A()
中的代码时,则默认程序流在B()
中恢复。 - 如果在
main()
中选择一个菜单项会调用另一个显示其自己的项目列表的函数submenu()
会发生什么?如果执行完submenu()
并在用户按下 Enter 键时返回到main()
,程序流程会发生什么情况?
使用单独的函数来表示子菜单是一种可行的解决方案,但这可能不是最佳做法。在每个功能中有很多复制和粘贴来处理菜单“机制”(显示基本菜单,指示突出显示的选择等),这可能会导致修复错误和随着时间的推移维护此代码的问题 - 如果一个菜单如何显示,您必须检查您创建的所有菜单功能并修复每个菜单中的错误。
如果您想将其整合为更紧凑和可维护的方法,您可能需要考虑以下几点:
- 您正在做的是显示一个列表。
- 您显示的列表是一系列项目。
- 每个项目可能包含自己的列表,或者可能只是要显示的文本,甚至是指向另一个函数的指针。
您将如何构建一个函数来显示此类 List 对象并与之交互?
关于c - 编写一个简单程序的菜单阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8525376/