循环内部开关变得无限

时间:2014-04-16 23:14:40

标签: c++ while-loop switch-statement

当程序进入第二个循环时,即使我将第二个循环的值设置为false,它也会变为无限。问题出在哪里?第一个while循环我从未遇到任何问题退出,但第二个...我只是看不到在哪里或为什么。

int RareData::assignRareType()
{

    int switchType;
    std::cin >> switchType;
    bool valid = true;
    bool valid2 = true;

    while (valid)
    {
        switch (switchType)
        {

        case 0:
            std::cout << "1 - Character Change\n2 - Account Change\n3 - Both\n";
            int switchData;
            std::cin >> switchData;
            valid2 = true;

            while (valid2)
            {
                switch (switchData)
                {
                case 1:
                    valid2 = false;
                    std::cin.clear();
                    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
                    assignCharacter();
                    break;
                case 2:
                    valid2 = false;
                    std::cin.clear();
                        std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
                    assignAccount();
                    break;
                case 3:
                    valid2 = false;
                    std::cin.clear();
                    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
                    assignAccount();
                    assignCharacter();
                    break;
                default:
                    std::cout << "Options only range from 1-3\n1 - Character Change\n2 - Account Change\n3 - Both\n";
                    std::cin.clear();
                    std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
                    std::cin >> switchData;
                }
            }
            break;
        default:

            std::cin.clear();
            std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
            std::cin >> switchType;
        }
    }
    return 0;
}

2 个答案:

答案 0 :(得分:5)

您将valid2设置为false,但valid仍为真。所以你的第一个while循环一次又一次地运行。执行顺序如下:

while(valid) == true
    case 0:
           get switchdata, set valid2 = true
                second while loop
                 break
Repeat because valid is always true, switchtype never changes.

答案 1 :(得分:0)

变量valid初始化为true且永远不会更改,因此实际上它是永远不会终止的第一个 while循环,而不是第二个循环。

相关问题