我写了一个布尔函数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')
你仍然有以下问题:
只有当用户以小写或大写输入Y
或N
时,函数才会返回值。但是,如果用户输入了一个无效字母,该怎么办?您需要为这种情况定义一种行为。目前,您的程序没有针对这种情况的返回语句,导致未定义的行为,这意味着函数的结果可以是任何。
您可以返回默认值(例如false
),然后需要删除第二个条件if
,但保留return false
。
另一种解决方案是循环,直到用户输入有效值。