【问题标题】:Bool function `again()` getting same result布尔函数`again()`得到相同的结果
【发布时间】:2013-11-21 20:52:45
【问题描述】:

我写了一个布尔函数again()来提示用户重新运行程序,但是对于用户输入的任何答案,无论如何程序都会重新运行。

bool again()
{
  //Local variable                                                                                                                        
  char answer;

  cout<<"Would you like to re-run? (Y/N) ";
  cin>>answer;
  cin.ignore(100,'\n');


  if(answer == 'Y' || 'y')
  {
    return true;
  }

  if(answer == 'N'  || 'n')
  {
     return false;
  }
}

...

  do
       {
         menu(gameamount,response);

         if (response == 1)
         {
           inputs(gameamount, game_count);
           writeout(gameamount);
         }
         if (response == 2)
         {
           outputs(gameamount, game_count);
         }
       }while(again());

       return 0;
}

我尝试使用 else 和 else if 并在第一个 if 语句之后返回 false 但这仍然不起作用,我不能将代码块放在 main 中以节省空间,所以我必须创建一个布尔函数来询问用户重新运行程序。

【问题讨论】:

    标签: c++ return-value main boolean-logic


    【解决方案1】:

    您的代码中存在逻辑错误。

    试试这个:

    if(answer == 'Y' || answer == 'y')
    {
        return true;
    }
    
    if(answer == 'N'  || answer == 'n')
    {
        return false;
    }
    

    如果用户决定输入除'Y''y''N''n' 以外的其他内容,您还应该输出一条消息。

    此外,我对此不是 100% 确定,但我认为您的代码总是在第一个 if 语句中返回 true,因为您正在检查 'y' 是否为真,我认为它总是是。

    if(answer == 'Y' || 'y')
    {
        return true;
    }
    

    0 以外的任何值都等于 true,并且字符 'y' 在被视为整数时等于它对应的 ASCII 码(在这种情况下为 121)。

    【讨论】:

    • 非常感谢,真不敢相信我怎么没注意!
    【解决方案2】:

    尝试换行

    if(answer == 'Y' || 'y')
    

    通过

    if(answer == 'Y' || answer == 'y')
    

    【讨论】:

    • 他也需要对字符'N'和'n'做同样的事情
    • 对,但问题是第一个条件总是为真,所以第二个条件永远不会被评估。
    【解决方案3】:

    线

    if (answer == 'Y' || 'y')
    

    将进入if在任何情况下,因为它不会评估你想要的。它评估answer == 'Y' 是真还是假,然后将这个值与'y' 进行或运算。在这一步中,'y' 被转换为布尔值以便进行逻辑或运算,并且由于所有不等于 0 的数字都被转换为true,因此整个表达式始终为true

    如果您将其更正为

    if (answer == 'Y' || answer == 'y')
    

    你还有以下问题:

    您的函数仅在用户输入或者 Y N 的小写或大写的情况下返回一个值。但是如果用户输入了一个无效的字母呢?您需要为这种情况定义一种行为。目前你的程序没有针对这种情况的return语句,导致未定义的行为,这意味着函数的结果可以是anything

    您可以返回一个默认值(例如false),然后您需要删除第二个条件if,但保留return false

    另一种解决方案是循环直到用户输入有效值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-09
      • 2019-05-28
      • 1970-01-01
      • 2021-09-26
      相关资源
      最近更新 更多