c++ - 试图找出为什么我的代码保持无限循环

标签 c++

我对编程非常陌生,请原谅我缺乏的知识。我正在尝试创建一个简单的菜单,在其中我将通过按1,2,3等来执行一些问题,但是我的代码不断重复循环,我不明白为什么。

int main()
{
    int choice;
    do
    {
        cout << "\t|--------------------------- Menu ---------------------------|" << endl;
        cout << "1.|- Добавяне на телефонни номера -|" << endl;
        cout << "2.|- Извеждане на всички телефонни абонати на екрана -|" << endl;
        cout << "3.|- Месечно потребление -|" << endl;
        cout << "4.|- Изчисление на месечна такса -|" << endl;
        cout << "5.|- Справки за абонатите с под меню -|" << endl;
        cout << "6.|- Край на програмата -|" << endl;

    switch(choice)
        {
            case 1:
                break;
            case 2:
                break;
            case 3:
                break;
            case 4:
                break;
            case 5:
                break;
            case 6:
                    cout << "|- Благодаря ви -|" << endl;
                return 0;
        }  

   }       
while(choice != 6);
}

最佳答案

您需要在代码中使用cin,才能在每次循环时更改choice的含义。处理无效的用户输入也是一个好主意。这由(!(cin >> choice))完成,直到输入将返回true为止。在这种情况下,您想cin.clear()cin.ignore()重置流的状态,以便您可以继续向用户询问正确的输入。

#include<iostream>
using namespace std;

int main()
{
    // it is a good idea to initialize the variable when you create it
    int choice = 0;
    do
    {
        cout << "\t|--------------------------- Menu ---------------------------|" << endl;
        cout << "1.|- Добавяне на телефонни номера -|" << endl;
        cout << "2.|- Извеждане на всички телефонни абонати на екрана -|" << endl;
        cout << "3.|- Месечно потребление -|" << endl;
        cout << "4.|- Изчисление на месечна такса -|" << endl;
        cout << "5.|- Справки за абонатите с под меню -|" << endl;
        cout << "6.|- Край на програмата -|" << endl;


        // this loop will handle incorrect inputs from the user
        // for example entering a char, when the stream is expecting an int
        while (!(cin >> choice))
        {
            cin.clear();
            cin.ignore();
            cout << "Please enter a valid choice: ";
            cin >> choice;
        }

        switch (choice)
        {
        case 1:
            break;
        case 2:
            break;
        case 3:
            break;
        case 4:
            break;
        case 5:
            break;
        case 6:
            cout << "|- Благодаря ви -|" << endl;
            return 0;
        }

    } while (choice != 6);
}

关于c++ - 试图找出为什么我的代码保持无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59361693/

相关文章:

c++ - 如何使函数保存对 C++ 中结构输入的修改?

c++ - 自身模板崩溃原因

c++ - 在 Eigen 中创建置换矩阵

c++ - 如何使用来自另一个分支的类指针访问层次结构一个分支的类的成员?

java - 在运行时从 jar 文件加载的类上查找类

c++ - switch语句默认范围?

c++ - 编译错误 : ambiguous overload for 'operator='

c++ - constexpr 对匿名结构变量的引用

c++ - 禁用对 Pivot 的关注

c++ - 使用英特尔编译器套件编译 OpenMPI 应用程序