В программе, которую я пишу, есть два случая, в которых я использую составные логические операторы для эффективного сравнения переменной с несколькими значениями. Один из них работает просто отлично. У меня есть массив символов, и я хочу проверить, равен ли один из элементов одному из двух значений, без необходимости пересчитывать переменную. У меня также есть целое число под названием hourInt, но это не важно. Код, который я использовал для условного выражения, выглядит следующим образом:
if (charArray[8] == 'P' || 'p' && hourInt != 12){
hourInt += 12;
}
if (charArray[8] == 'A' || 'a' && hourInt == 12){
hourInt -= 12;
}
И оба эти условных выражения выполняют свою работу правильно - они проверяют, равно ли charArray [8] одному из двух значений. Но потом, позже в программе, я снова попытался использовать составные логические операторы. У меня есть двухсимвольная строка с именем meridies, и я хочу посмотреть, не равно ли она одному из четырех значений. Я создал условное выражение с составными логическими операторами следующим образом:
if (meridies != "AM" || "am" || "PM" || "pm"){
cout << "Error: Unknown value for the meridies." << endl;
return inputTime();
}
В отличие от первого условного выражения, в котором правильно сравниваются значения, второе всегда возвращает значение true, даже если меридианы действительно равны одному из четырехслучаев. Я знаю, что мог бы просто настроить это как четыре различных сравнения, каждое из которых имеет свой логический оператор, но мне просто интересно, почему это второе условие не работает, тогда как первое работает.