C++:循环菜单切换

Posted

技术标签:

【中文标题】C++:循环菜单切换【英文标题】:C++: Looping Menu Switch 【发布时间】:2015-01-03 22:20:54 【问题描述】:

我有一个任务,我必须有一个可以正常工作的菜单,如果我输入错误的输入,它就不会崩溃或退出,并且它不能有无限循环。虽然我的菜单没有退出或崩溃,但它会进入一个无限循环,如果我输入除整数以外的任何内容。这是我的代码。

void mainMenu()

    int option;
    cout << "\t\t\t***** Project: Algorithms *****\n\n\n";

    cout << "Enter your selection.\n\n";

    cout << "1\tSearches.\n";
    cout << "2\tCalculations and negations.\n";
    cout << "3\tCopying.\n";
    cout << "4\tExit the program.\n";

    cout << "Please enter the menu next to each option.\n> " << flush;
    cin >> option;

    switch (option)
    
    case 1: cout << "Yes!";
            system("cls");
            searchMenu();
        break;
    case 2: cout << "Yes!";
            system("cls");
            Calc_NegateMenu();
        break;
    case 3: cout << "Yes!";
            system("cls");
            copyMenu();
        break;
    case 4: cout << "Yes!";
            exit(0);
        break;
    default: cout << "ERROR! Invalid input!";
            system("cls");
            mainMenu();
        break;
    

其他菜单。

void searchMenu()

    int option;
    cout << "\t\t\t***** Search *****\n\n\n";

    cout << "Enter your selection.\n\n";

    cout << "1\tSearch for a element with find.\n";
    cout << "2\tSearch for an element with binary search.\n";
    cout << "3\tSearch for pair elements.\n";
    cout << "4\tBack to the main menu.\n";

    cout << "Please enter the menu next to each option.\n> " << flush;
    cin >> option;

    switch (option)
    
    case 1: cout << "Yes!";
        system("cls");
        searchMenu();
        break;
    case 2: cout << "Yes!";
        system("cls");
        Calc_NegateMenu();
        break;
    case 3: cout << "Yes!";
        system("cls");
        copyMenu();
        break;
    case 4: cout << "Yes!";
        system("cls");
        copyMenu();
        break;
    default: cout << "ERROR! Invalid input!";
        system("cls");
        mainMenu();
        break;
    


void Calc_NegateMenu()

    int option;
    cout << "\t\t\t***** Calculate or Negate *****\n\n\n";

    cout << "Enter your selection.\n\n";

    cout << "1\tCalculate the total sum of all elements in the vector.\n";
    cout << "2\tNegate all elements in the vector.\n";
    cout << "3\tBack to the main menu.\n";

    cout << "Please enter the menu next to each option.\n> " << flush;
    cin >> option;

    switch (option)
    
    case 1: cout << "Yes!";
        system("cls");
        searchMenu();
        break;
    case 2: cout << "Yes!";
        system("cls");
        Calc_NegateMenu();
        break;
    case 3: cout << "Yes!";
        system("cls");
        mainMenu();
        break;
    default: cout << "ERROR! Invalid input!";
        system("cls");
        mainMenu();
        break;
    


void copyMenu()

    int option;
    cout << "\t\t\t***** Copy *****\n\n\n";

    cout << "Enter your selection.\n\n";

    cout << "1\tCopy to list.\n";
    cout << "2\tCopy to file.\n";
    cout << "3\tBack to the main menu.\n";

    cout << "Please enter the menu next to each option.\n> " << flush;
    cin >> option;

    switch (option)
    
    case 1: cout << "Yes!";
        system("cls");
        searchMenu();
        break;
    case 2: cout << "Yes!";
        system("cls");
        Calc_NegateMenu();
        break;
    case 3: cout << "Yes!";
        system("cls");
        mainMenu();
        break;
    default: cout << "ERROR! Invalid input!";
        system("cls");
        mainMenu();
        break;
    

【问题讨论】:

***.com/help/mcve 这不是循环问题,但是您对 mainMenu() 等的所有嵌套调用都会导致程序从对其的调用中对其进行越来越多的调用,而不会返回 i> 从任何使用越来越多的内存,直到你退出()。 cin for an int inputing a char causes Loop that is supposed to check input to go wild的可能重复 感谢您的回答(我还是编程新手。),问题是我试图让它变得万无一失,这样当有人输入一个不属于开关的数字时如果它说错误并返回主菜单。 查看我的答案:了解 cin 的工作原理,以便在 cin(或您选择的任何方法)找不到整数时执行所需的操作。关于“事情是......”:你想说什么?这是一个目标。这不是做没有完成的事情的理由。 【参考方案1】:

当 cin 到一个整数找不到一个时,它会设置一个错误标志,并且在标志被清除之前不会从输入中读取。

见this answer 或this one。

搜索“cin 无限循环”并阅读 cin 文档。

【讨论】:

成功了,非常感谢。虽然我想知道是否有办法延迟它,以便错误消息可以在它停止流之前发出。 已经完成了,我只是想知道是否有办法做到这一点,而不必发一个全新的帖子。 有两个流。如果您希望输出流上的待处理字符在 cin 刷新之前出现,请自行刷新,就像在其他地方一样。

以上是关于C++:循环菜单切换的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中根据鼠标位置查找菜单项

uniapp切换菜单不顺滑

桌面会飞的鸟Qt C++小项目

桌面会飞的鸟Qt C++小项目

桌面会飞的鸟Qt C++小项目

win8常用快捷键