我写了一个bool函数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语句之后返回false但仍然无效,我不能将代码块放在main中以节省空间所以我必须创建一个布尔函数来询问用户重新运行程序。
答案 0 :(得分:3)
您的代码中存在逻辑错误。
试试这个:
if(answer == 'Y' || answer == 'y')
{
return true;
}
if(answer == 'N' || answer == 'n')
{
return false;
}
如果用户决定键入'Y'
,'y'
,'N'
或'n'
以外的其他内容,您还应该输出消息。
另外,我对此并不是百分之百确定,但我认为您的代码总是在第一个if语句中返回true
,因为您正在检查'y'
是否为真,我认为一直都是。
if(answer == 'Y' || 'y')
{
return true;
}
除0以外的任何值都等于true,而当被视为整数时,字符'y'
等于它的相应ASCII码(在这种情况下为121)。
答案 1 :(得分:0)
尝试替换
行if(answer == 'Y' || 'y')
通过
if(answer == 'Y' || answer == 'y')
答案 2 :(得分:0)
该行
if (answer == 'Y' || 'y')
将在每种情况下输入if
块 ,因为它不会评估您的意图。它评估answer == 'Y'
是真还是假,但是然后将此值与'y'
进行或运算。在此步骤中,'y'
将转换为布尔值,以便在逻辑上进行OR运算,并且由于所有不等于0的数字都将转换为true
,因此整个表达式始终为true
。
如果你更正
if (answer == 'Y' || answer == 'y')
你仍然有以下问题:
如果用户输入 Y
或 N
(大写或小写),您的函数只会返回一个值。但是,如果用户输入无效字母,该怎么办?您需要为此情况定义行为。目前你的程序没有针对这种情况的return语句,导致未定义的行为,这意味着该函数的结果可以是任何。
您可以返回默认值(例如false
),然后您需要删除第二个条件if
,但保留return false
。
另一个解决方案是循环,直到用户输入有效值。