是否有正确的方法从函数内关闭程序?

时间:2017-06-09 10:39:41

标签: c++ cmd

我目前正在制作一个包含菜单和子菜单的程序,我希望有机会从任何子菜单(内部功能)中关闭整个菜单。我知道我可以采用不同的方式(我现在都有这种方式以及我知道可以在下面完成的方式)但是为了将来的使用(我可以证明有用)我想知道:

有没有办法在功能中正确关闭程序?

我已经阅读了几个答案herehere,而我从中得到的答案是:

  1. 我不应该简单地终止代码
  2. 我不应该使用任何特定于系统的代码来避免兼容性问题
  3. 有点澄清 - 这是我个人教育目的的程序所以没有必要担心它,但我宁愿学习一开始处理这些情况的方法,而不是一旦我重新学习它们发现以后如何做,并且必须回去修理它。

    代码样本(使用visual studio 2017):

    //skipping unrelevant to question bits of code
                    void sub_menu()
                {
                    char a=0;
                    system("cls"); //yet to get changed when i'll find other way of clearing screen
                    std::cout << "Pick function:\n"
                        << "---------------------------------------------------------\n"
                        << "1.Foobar_1\n"
                        <<"---------------------------------------------------------\n"
                        << "ESC to go back to menu menu\n"
                        << "x to close";
                    while (a != 27)
                    {
                        a = _getch();
                        switch (a)
                        {
                        case 49:foobar_1(); break;
                        case 120:
                        case  88: system("exit"); break; //i'd like to replace that part
                        default: break;
                        };
                    };
                    return;
                }
    
    void main()
                {
                    char a=0;
                    system("cls"); //yet to get changed when i'll find other way of clearing screen
                    std::cout << "Pick what you want to do:\n"
                        << "---------------------------------------------------------\n"
                        << "1.Sub_menu\n"
                        << "2.foo\n"
                        << "3.bar\n"
                        <<"---------------------------------------------------------\n"
                        << "ESC to close\n"
                    while (a != 27)
                    {
                        a = _getch();
                        switch (a)
                        {
                        case 49:sub_menu(); break;
                        case 50:foo(); break;
                        case 51:bar(); break;
                        case 120:
                        case  88: system("exit"); break; //i'd like to replace that part
                        default: break;
                        };
                    };
                    return;
                }
    

    我可以实现它的方式(我认为它只是解决了这个问题):

        //skipping unrelevant to question bits of code
           void main()
                    {
                        char a=0;
                        system("cls"); //yet to get changed when i'll find other way of clearing screen
                        std::cout << "Pick what you want to do:\n"
                            << "---------------------------------------------------------\n"
                            << "1.Sub_menu\n"
                            << "2.foo\n"
                            << "3.bar\n"
                            <<"---------------------------------------------------------\n"
                            << "ESC to close\n"
                        while (a != 27)
                        {
                            a = _getch();
                            switch (a)
                            {
                            case 49:
    {
    {
                        char b=0;
                        system("cls");
                        std::cout << "Pick function:\n"
                            << "---------------------------------------------------------\n"
                            << "1.Foobar_1\n"
                            <<"---------------------------------------------------------\n"
                            << "ESC to go back to menu menu\n"
                            << "x to close";
                        while (b != 27)
                        {
                            b = _getch();
                            switch (b)
                            {
                            case 49:foobar_1(); break;
                            case 120:
                            case  88: a=27; break;
                            default: break;
                            };
                        };
                        return;
                    }
    }
    ; break;
                            case 50:foo(); break;
                            case 51:bar(); break;
                            case 120:
                            case  88: system("exit"); break; //i'd like to replace that part
                            default: break;
                            };
                        };
                        return;
                    }
    

1 个答案:

答案 0 :(得分:0)

此代码将按照您提及的方式运行。

int main()
{
    int a;
    while (true)
    {
        system("cls"); //yet to get changed when i'll find other way of clearing screen
        cout << "Pick what you want to do:\n"
             << "---------------------------------------------------------\n"
             << "1.Sub_menu\n"
             << "2.foo\n"
             << "3.bar\n"
             << "---------------------------------------------------------\n"
             << "0. to close\n";
        cin >> a ;
        if (a == 0)
        {
            return 0 ;
        }
        else if (a == 1)
        {
            char b;
            while (true)
            {
                system("cls");
                cout << "Pick function:\n"
                     << "---------------------------------------------------------\n"
                     << "1.Foobar_1\n"
                     << "---------------------------------------------------------\n"
                     << "b to go back to menu menu\n"
                     << "x to close\n";
                cin >> b;
                if (b == '1')
                {
                    foobar_1();
                }
                else if (b == 'B' || b == 'b')
                {
                    break;
                }
                else if (b == 'x' || b == 'X')
                {
                    return 0;
                }
                else
                {
                    cout << "invalid input";
                }
            }
        }
        else if (a == 2)
        {
            foo();
        }
        else if (a == 3)
        {
            bar();
        }
        else
        {
            cout << "invalid input";
        }
    }
    return 0;
}