【问题标题】:For loop tricksFor循环技巧
【发布时间】:2016-07-15 13:53:44
【问题描述】:

我编写此代码是为了提示用户输入不是 5 的数字,否则游戏结束。如果用户输入一个数字 10 次,它应该会显示中奖信息。但是,如果用户输入 5,我发现自己在不显示获胜消息方面很挣扎。当用户输入 5 而不是两者时,我该怎么做才能只打印失败消息?另外,有没有办法让我的代码更简单?

for (int i = 0; i < 10; i++)
{
    cout << i+1 << "- enter a number: ";
    cin >> number;

    if (number == 5)
    { cout << "you were not supposed to enter 5!\n"; // Failure message
      break;
    }
}

cout << "Wow, you're more patient than I am, you win.\n"; // winner message

【问题讨论】:

  • bool did_user_enter_5 = false; ... if(number == 5) {did_user_enter_5 = true; ...} ... if(!did_user_enter_5) cout &lt;&lt; "Wow, ... 是一种可行的方法。您也可以使用goto 而不是break 在打印中奖信息后跳转。或者你可以把它变成另一个函数并将break更改为return;
  • 如果用户输入 5,您需要将某种标志(布尔变量)设置为 true,然后在打印获胜消息之前检查它。
  • 我非常惊讶每个人的回复速度如此之快!非常感谢大家的提示。以前从未真正听说过布尔标志。非常感谢你:)
  • @Lucky.Tiger 这就是让我感到难过的地方,社区往往是明智但缺乏经验的程序员的障碍。

标签: c++ for-loop


【解决方案1】:

一种方法是扩大i 的范围并检查:

int i = 0;
for (; i < 10; i++)
{
    cout << i+1 << "- enter a number: ";
    cin >> number;

    if (number == 5)
    {
      cout << "You were not supposed to enter 5!\n"; // Failure message
      break;
    }
}

if (i == 10)
{
    cout << "Wow, you're more patient than I am, you win.\n"; // winner message
}

另一个是使用布尔标志:

bool win = true;
for (int i = 0; i < 10; i++)
{
    cout << i+1 << "- enter a number: ";
    cin >> number;

    if (number == 5)
    {
        cout << "You were not supposed to enter 5!\n"; // Failure message
        win = false;
        break;
    }
}

if (win)
{
    cout << "Wow, you're more patient than I am, you win.\n"; // winner message
}

【讨论】:

    【解决方案2】:

    循环结束的原因有两个:用户输入了 10 个非 5,或者他们输入了 5 打破了循环。所以只要查看循环后number的值是什么就可以区分两者了。

    【讨论】:

      【解决方案3】:

      您可以将整个for 循环放在一个返回布尔值/整数的函数中 然后在if中调用函数

      喜欢:

      if(game()==true)
         cout << "Wow, you're more patient then I am, you win.\n"; // winner message
      else
         cout << "you were not supposed to enter 5!\n";  // Failure message
      

      把东西放在一个函数中是功课:)

      提示:用函数内部的 return 替换 couts ;)

      【讨论】:

      • if (x == true) 是我最讨厌的。为什么不只是if (game())
      • 当然你也可以这样做,不想假设你知道它,它只是更明显:)
      【解决方案4】:

      您需要使用标志,一种可能的解决方案是(这也使您的代码更简单):

      bool win = true;
      for (int i = 0; i < 10 && win; i++)
      {
          cout << i+1 << "- enter a number: ";
          cin >> number;
      
          win = number != 5;
      }
      if( win ) 
          cout << "Wow, you're more patient then I am, you win.\n"; // winner message
      else
          cout << "you were not supposed to enter 5!\n"; // Failure message
      

      【讨论】:

        【解决方案5】:

        一个简单的布尔标志将解决您的问题。

        bool enteredFive = false;
        for (int i = 0; i < 10; i++)
        {
            cout << i + 1 << "- enter a number: ";
            cin >> number;
        
            if (number == 5)
            {
                cout << "You were not supposed to enter 5!" << endl;
                enteredFive = true;
                break;
            }
        }
        
        if (!enteredFive)
            cout << "Wow, you're more patient then I am, you win!" << endl;
        

        【讨论】:

          【解决方案6】:

          使用标志变量 [Here isFive] 检查用户是否输入过 5 并根据该决定打印。

          bool isFive = false;
          for (int i = 0; i < 10; i++)
          {
              cout << i+1 << "- enter a number: ";
              cin >> number;
          
              if (number == 5)
              { 
                isFive = true;
                cout << "you were not supposed to enter 5!\n"; // Failure message
                break;
              }
          }
          if(!isFive)
             cout << "Wow, you're more patient then I am, you win.\n"; // winner message
          

          【讨论】:

            【解决方案7】:
            int number;
            for (int i = 0; i < 10; i++)
            {
            
                std::cout << i + 1 << "- enter a number: ";
                std::cin >> number;
            
                if (number == 5)
                {
                    std::cout << "you were not supposed to enter 5!\n"; // Failure message
                    return 0;
                }
                
                
            }
            std::cout << "Wow, you're more patient than I am, you win.\n"; // winner message
            

            【讨论】:

            • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
            猜你喜欢
            • 1970-01-01
            • 2020-02-10
            • 1970-01-01
            • 2018-10-11
            • 1970-01-01
            • 2012-01-20
            • 1970-01-01
            • 2021-07-28
            • 1970-01-01
            相关资源
            最近更新 更多