c++ - C++ 复合逻辑运算符不与比较运算符一起使用
问题描述
我正在编写的程序中有两种情况,我正在使用复合逻辑运算符有效地将变量与多个值进行比较。其中之一工作得很好。我有一个字符数组,我想检查其中一个元素是否等于两个值之一,而不必重新声明变量。我也有一个叫做hourInt的整数,但这并不重要。我用于条件的代码如下:
if (charArray[8] == 'P' || 'p' && hourInt != 12){
hourInt += 12;
}
if (charArray[8] == 'A' || 'a' && hourInt == 12){
hourInt -= 12;
}
并且这两个条件都正确执行了它们的工作——它们检查 charArray[8] 是否等于两个值之一。但是,后来在程序中,我再次尝试使用复合逻辑运算符。我有一个名为 meridis 的两个字符的字符串,我想看看它是否不等于四个值之一。我用复合逻辑运算符设置了一个条件,如下所示:
if (meridies != "AM" || "am" || "PM" || "pm"){
cout << "Error: Unknown value for the meridies." << endl;
return inputTime();
}
与正确比较值的第一个条件不同,第二个条件始终返回 true,即使 meridies 确实等于四种情况之一。我知道我可以将其设置为四个不同的比较,每个比较都有自己的逻辑运算符,但我只是想知道为什么第二个条件不起作用而第一个条件起作用。
解决方案
是的,您可能需要阅读运算符的工作方式(以及运算符优先级)。
首先,这是一个废话:
charArray[8] == 'P' || 'p'
您是说,如果 (charArray[8] == 'P') 为真,或 'p' 为真。'p' 将永远为真,因为它不为零。目前尚不完全清楚您要使用该代码做什么,但我假设这些内容?
if ( (charArray[8] == 'P' || charArray[8] == 'p') && hourInt != 12)
至于这个:
if (meridies != "AM" || "am" || "PM" || "pm")
如果meridas 是一个 std::string,那么它应该是:
if (meridies != "AM" && meridies != "am" && meridies != "PM" && meridies != "pm")
但是,如果 meridis 是一个 char 数组,那么您应该这样做:
if (strcmp(meridies, "AM") != 0 &&
strcmp(meridies, "am") != 0 &&
strcmp(meridies, "PM") != 0 &&
strcmp(meridies, "pm") != 0)
推荐阅读
- hadoop - “插入”正在覆盖数据
- python - admin.py 中查询集中订单的单元测试
- docker - 在 docker 容器中运行巧克力失败
- ios - 在视图中使用相机截取应用程序会返回空白图像
- c# - 在创建自定义图像 Html 帮助程序时,它会抛出 System.ArgumentNullException: 'Value cannot be null。参数名称:virtualPath'
- qt - 使用 QImage 显示图像而不在 Qt 中使用 pixmap?
- angular - 无法使用引导程序编译角度
- google-analytics - 每个国家/地区超过 2 年的分析数据
- asp.net-core - Octopus Deploy conditional variable substitution in an array
- maya - 如何在不影响相对于世界的子节点动画的情况下为根控制器设置动画?