c - 编写一个简单程序的菜单阶段

标签 c visual-studio-2008

我在使用 Visual C 开发 uni 项目的这个阶段时遇到了问题。我想知道你是否可以帮我一个大忙,帮助我解决这个问题。
在这个阶段,我们必须构建它的菜单,包括这五个子菜单:

  1. 继续上一场比赛...
  2. 单人游戏
  3. 选项
  4. 致谢
  5. 最高分

我们的导航策略:使用向上和向下按钮(箭头)滚动浏览这 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;}
}

最佳答案

考虑以下几点:

  1. 您有一个显示项目列表并允许您从列表中选择项目的函数。
  2. 如果您从函数 B() 中调用函数 A(),当您执行完 A() 中的代码时,则默认程序流在 B() 中恢复。
  3. 如果在 main() 中选择一个菜单项会调用另一个显示其自己的项目列表的函数 submenu() 会发生什么?如果执行完 submenu() 并在用户按下 Enter 键时返回到 main(),程序流程会发生什么情况?

使用单独的函数来表示子菜单是一种可行的解决方案,但这可能不是最佳做法。在每个功能中有很多复制和粘贴来处理菜单“机制”(显示基本菜单,指示突出显示的选择等),这可能会导致修复错误和随着时间的推移维护此代码的问题 - 如果一个菜单如何显示,您必须检查您创建的所有菜单功能并修复每个菜单中的错误。

如果您想将其整合为更紧凑和可维护的方法,您可能需要考虑以下几点:

  • 您正在做的是显示一个列表。
  • 您显示的列表是一系列项目。
  • 每个项目可能包含自己的列表,或者可能只是要显示的文本,甚至是指向另一个函数的指针。

您将如何构建一个函数来显示此类 List 对象并与之交互?

关于c - 编写一个简单程序的菜单阶段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8525376/

相关文章:

CreateDesktop() 与 vista 和 UAC on (C, windows)

android - 无法连接到远程进程。中止调试 session

c - 如何使用 Microsoft Visual C++ IDE 获取变量的固定地址?

c# - 如何为 Visual Studio 项目添加和编译自定义 'Platform' 开关?

linq - Linq to sql作为对象数据源-部分类的设计器问题

c - Valgrind 错误和每个元素一个分配的通用列表

c - 宏在计算其位后不会将预期值分配给变量

c - 我们如何从给定的内存指针中找到 MEMORY SIZE?

c++ - 什么是虚拟适配器

c# - 如何读取 C# app.config 文件中的多个值?