循环内部开关变得无限

Kil*_*ing 0 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;
}
Run Code Online (Sandbox Code Playgroud)

yiz*_*lez 5

你设定valid2false,但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.
Run Code Online (Sandbox Code Playgroud)