当程序进入第二个循环时,即使我将第二个循环的值设置为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;
}
答案 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
循环,而不是第二个循环。