是否建议将用户从另一个函数路由到主函数?

时间:2016-04-14 21:47:50

标签: c menu

我是编码的新手,我听说调用主要功能是不好的做法,但是我没有看到另一种方法可以在菜单中来回导航,而不是我在这段代码。我在这里做了什么"呼叫"主要功能?这是合法的吗?

非常感谢。

#include <stdio.h>

void MAINmenu();
void menu1();
void menu2();
int m;

int main()
{
    MAINmenu();
}
void MAINmenu()
{
    printf("MAIN MENU\tplease choose menu 1, menu 2, or 3 to quit\n");
    scanf("%d",&m);
    do
    {
        switch(m)
        {
            case 1:
                menu1();
                break;
            case 2:
                menu2();
                break;
            case 3:
                printf("GOODBYE");
                break;
            default:
                printf("ERROR.\n");
                main();
                break;
        }
    }while(m!=3);
}
void menu1()
{
    printf("MENU 1.\n");
    printf("would you like to continue here(1) or go back to main(2)?\n");
    scanf("%d",&m);
    switch(m)
    {
        case 1:
            menu1();
            break;
        case 2:
            main();
            break;
        default:
            printf("ERROR.\n");
            menu1();
            break;
    }
}
void menu2()
{
    printf("MENU 2.\n");
    printf("would you like to continue here(1) or go back to main(2)?\n");
    scanf("%d",&m);
    switch(m)
    {
        case 1:
            menu2();
            break;
        case 2:
            main();
            break;
        default:
            printf("ERROR.\n");
            menu2();
            break;
    }
}

1 个答案:

答案 0 :(得分:0)

你也可以这样做:

int main()
{
    while (MAINmenu());
    return 0;
}
int MAINmenu()
{
    printf("MAIN MENU\tplease choose menu 1, menu 2, or 3 to quit\n");
    scanf("%d",&m);
    do
    {
        switch(m)
        {
            case 1:
                menu1();
                break;
            case 2:
                menu2();
                break;
            case 3:
                printf("GOODBYE");
                break;
            default:
                printf("ERROR.\n");
                return 1;
        }
    }while(m!=3);
    return 0;
}
...

但是调用main()也可以。