这里我设置了一个while循环,我在其中输入选择号1或2.如果我选择1或2,它会根据我的选择输出1或2;如果我选择一个低于1或高于2的数字,它会转到else语句,要求用户再次输入。但是,如果用户输入问题,如果他们选择正确的数字1或2,它将不会循环回到开头;它只会在那里结束循环而不会转到正确的if
子句。为什么是这样?我觉得好像我正确地攻击了它。
int menus (int selection)
{
while ( selection > 2 || selection < 1)
{
if (selection == 1)
{
cout << " 1 " << endl;
}
if (selection == 2)
{
cout << " 2 " << endl;
}
else
cout << "You didnt choose 2 or 3. Choose again";
cin >> selection;
}
return 0;
}
答案 0 :(得分:3)
您的循环条件已扭曲。
如果选择为3,4,5,......(因为selection > 2
)或selection
为0,-1,-2,...(<因为selection < 1
)。所以,你永远不会进入if
;你去了else
。然后,您可以在重做循环之前无条件地输入新选择。如果现在输入有效值,则循环终止。您可能还注意到您的消息与您希望用户提供的消息不匹配。
您的代码在正确缩进时与此非常相似:
int menus (int selection)
{
while (selection > 2 || selection < 1)
{
if (selection == 1)
{
cout << " 1 " << endl;
}
else if (selection == 2)
{
cout << " 2 " << endl;
}
else
cout << "You didn't choose 1 or 2. Choose again: ";
cin >> selection;
}
return 0;
}
如果您真的希望用户选择1或2并返回他们的选择,那么您需要更多类似的内容:
int menus (int selection)
{
while (selection > 2 || selection < 1)
{
cout << "You didn't choose 1 or 2. Choose again: ";
cin >> selection;
}
if (selection == 1)
cout << " 1 " << endl;
else if (selection == 2)
cout << " 2 " << endl;
return selection;
}
还有一些问题,比如'EOF会发生什么?'应该处理。当然,印刷也可以简化:
int menus (int selection)
{
while (selection > 2 || selection < 1)
{
cout << "You didn't choose 1 or 2. Choose again: ";
cin >> selection;
}
cout << " " << selection << " " << endl;
return selection;
}
答案 1 :(得分:2)
仔细查看你的'while'条件:只有当'selection'大于2或小于1时才会循环。然后你检查选择是1还是2 - 你刚刚排除了什么。 循环中也没有输入命令。
答案 2 :(得分:2)
您的while循环会排除您要在循环内测试的值!
while ( selection > 2 || selection < 1)
{
if (selection == 1)
{
// Impossible!! selection isn't > 2 or < 1.
}
你可以这样做:
while (1)
{
switch (selection) {
case 1:
case 2:
cout << " " << selection << " " << endl;
return 0;
default:
cout << "You didnt choose 1 or 2. Choose again";
cin >> selection;
}
}
我不明白为什么选择是你的功能的参数。没有更多代码,很难判断这是否合理。
答案 3 :(得分:2)
使用
do{
}while( selection > 2 || selection < 1);
而不是while。
答案 4 :(得分:2)
在我看到的内容中,您将选择内容传递给函数。 仅当输入不是1或2时,while循环才会运行。
因此将代码更改为:
int menus (int selection)
{
while (true)
{
if (selection == 1 || selection == 2)
{
cout << selection << endl;
break;
}
else
{
cout << "You didnt choose 1 or 2. Choose again";
cin >> selection;
}
}
return 0;
}
答案 5 :(得分:1)
在其他地方调用int menus()
,如下所示:
else{
cout << "You didnt choose 2 or 3. Choose again";
cin >> selection;
menus(selection);
}
答案 6 :(得分:1)
如果他们选择有效数字,则该数字不再符合您的循环的条件要求。如果用户失败太多次,你会发现你可以设置bool更容易循环,否则,你可以使用do{ /* get the input, count it or ask them to fix it */ }while(selection == 1 || selection == 2);
,当数字变为无效时将停止循环
答案 7 :(得分:-2)
如果输入1或2,它甚至不会进入循环,因为1或2都不大于2或小于1,它们是相等的。
这应该解决它:
while ( selection >= 2 || selection <= 1) //equals while(true)
请注意,您还应该在第二个时使用else if语句,如果它不能正常工作。
else if (selection == 2)
{
cout << " 2 " << endl;
break; // this leaves the loop
}