if(location[0] <= 'H' || location[0] >= 'A'
&& location[1] <= 8 || location[1] >= 1)
我正在检查第一个指标是否在'A'和'H'之间,第二个指数是在1-8之间。
如果用户输入{A,1},则参数将= 1 如果用户输入{J,1}
,则为-1答案 0 :(得分:2)
而且(&&
)的优先级高于或(||
),所以要表达你想要的东西:
if ((location[0] <= 'H' || location[0] >= 'A') && (location[1] <= 8 || location[1] >= 1))
否则发生的事情就是它完全相同:
if (location[0] <= 'H' || (location[0] >= 'A' && location[1] <= 8) || location[1] >= 1)
这显然不是你想要的。
您可以根据需要在条件中放置尽可能多的表达式,但必须记住优先级规则;为了清晰起见,我建议总是使用额外的括号。
正如Jeremiah在评论中所指出的那样,情况仍然不会做你想要的 - 你要问的是某些东西是否在给定的范围内,检查它是否 小于上限或大于下限(这涵盖所有输入),当您打算检查输入是否大于下限且小于上限时
if (location[0] <= 'H' && location[0] >= 'A' && location[1] <= 8 && location[1] >= 1)
在这种情况下,由于运算符都是&&
,因此不需要额外的括号,但为了更加清晰,可以添加它们。
答案 1 :(得分:1)
您需要&&
而不是||
s。例如:'Z' >= 'A' || 'Z' <= 'H'
为真。
if(location[0] <= 'H' && location[0] >= 'A' && location[1] <= 8 && location[1] >= 1)
虽然在这种情况下没有必要,但您应该将逻辑与括号分组(如果它们是||
,则必须使其按预期工作):
if((location[0] <= 'H' && location[0] >= 'A') && (location[1] <= 8 && location[1] >= 1))
答案 2 :(得分:0)
添加括号以对条件进行分组:
if( (location[0] <= 'H' || location[0] >= 'A') && (location[1] <= 8 || location[1] >= 1))
答案 3 :(得分:0)
如果location [0]等于'J'(绝对不在'A'和'H'之间),你的if子句将为TRUE,因为即使location [0]&lt; ='H'为FALSE, location [0]&gt; ='A'为TRUE,你正在使用|| (要么)。问题是你正在使用|| (或)代替&amp;&amp; (和)。你需要使用所有&amp;&amp; (AND)在if子句中。
答案 4 :(得分:0)
&&
的优先级高于||
。所以,你可能想把它写成
if((location[0] <= 'H' || location[0] >= 'A') && (location[1] <= 8 || location[1] >= 1))
如果你已经尝试过这个,请告诉你有什么错误
答案 5 :(得分:0)
对不起伙计们,新来的。我应该发布我的整个方法。感谢您解释运算符的优先级,但我的问题是我将char与int进行比较。我需要做的就是“围绕我的数字。”
void GameBoard::enterShips()
{
char location[2];
int ships = 0;
int count = 1;
while( ships < NUM_SHIPS )
{
cout << "Enter a location for Ship " << count << ": ";
cin >> location[0];
cin >> location[1];
cout << endl;
if((location[0] <= 'H' && location[0] >= 'A') && (location[1] <= '8' && location[1] >= '1'))
{
location[0] = location[0] - 64;
location[1]--;
Grid[location[0]][location[1]] = SHIP;
ships++;
count++;
}
else
{
cout << "Wrong coordinates entered. Try again." << endl << endl;
}
}
}
答案 6 :(得分:-1)
正如您在this operator precedence table中看到的那样, &&
是#13。它高于||
,即#14。
<强>因此:强>
if(location[0] <= 'H' || location[0] >= 'A'
&& location[1] <= 8 || location[1] >= 1)
相当于:
if(location[0] <= 'H' || (location[0] >= 'A'
&& location[1] <= 8) || location[1] >= 1)
您想要:
if((location[0] <= 'H' || location[0] >= 'A') &&
(location[1] <= 8 || location[1] >= 1))
甚至更好:
if(((location[0] <= 'H') || (location[0] >= 'A')) &&
((location[1] <= 8) || (location[1] >= 1)))
除了涉及*/
和+-
之外,我总是在括号内加上括号。即使你记住这张桌子,你也不应该假设其他人这样做。
它有助于代码的可读性并有助于防止错误...甚至编译器错误!三倍奖金。 :)
&&
s!这有效:
if(((location[0] <= 'H') && (location[0] >= 'A')) &&
((location[1] <= 8) && (location[1] >= 1)))