布尔函数`again()`得到相同的结果



我写了一个布尔函数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中以节省空间,所以我必须创建一个布尔函数来要求用户重新运行程序。

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

试试这个:

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)。

尝试替换行

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

通过

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

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

在任何情况下都会进入if块,因为它不会按照您的预期进行评估。它计算answer == 'Y'(真或假),然后将该值与'y'进行"或"运算。在该步骤中,'y'被转换为布尔值以便进行逻辑"或"运算,并且由于所有不等于0的数字都被转换为true,因此整个表达式始终是true

如果您将此更正为

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

你仍然有以下问题:

只有当用户以小写或大写输入YN时,函数才会返回值。但是,如果用户输入了一个无效字母,该怎么办?您需要为这种情况定义一种行为。目前,您的程序没有针对这种情况的返回语句,导致未定义的行为,这意味着函数的结果可以是任何

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

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

相关内容

  • 没有找到相关文章

最新更新