c++ - 我的逻辑有什么问题?

标签 c++

if(location[0] <= 'H' || location[0] >= 'A' 
&& location[1] <= 8 || location[1] >= 1)

我正在检查第一个索引是否在“A”和“H”之间,第二个索引是否在 1 - 8 之间。

所以如果用户输入 { A, 1 } 则参数 = 1 -1 如果用户输入 { J, 1 }

最佳答案

And (&&) 比 or (||) 有更高的优先级,所以要表达你想要的你需要:

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)

在这种情况下,由于运算符都是 &&,因此不需要额外的括号,但您可以添加它们以更加清晰。

关于c++ - 我的逻辑有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5136465/

相关文章:

c++ - 防止在头文件之外创建子类

c++ - 重载提取和插入 << >> 运算符 c++

c++ - what() 未打印的重新抛出异常的自定义错误消息

c++ - 执行时 : Issue with never ending loop

c++ - 捕获位图快吃RAM

c++ - 在深度 std::unordered_map 中插入唯一指针

c++ - 两个日志行与 c++ 中的 log4Cxx 混合

c++ - 二维中一组点中以 X 轴为底的最大空矩形

c++ - 类中 std::sort 的比较函数无法编译

c++ - 防止成员函数被单独调用