虽然循环不循环

时间:2011-10-08 06:41:16

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

这里我设置了一个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;
}

8 个答案:

答案 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
}