неправильно работает логическая операция ИЛИ
У меня возникла проблема с использованием операции ИЛИ в условном операторе if. Задача следующая: "Напишите программу, которая запрашивает целое число и печатает английское порядковое числительное. Общее правило: если число заканчивается на 1, ставят суффикс “st”, если на 2 — “nd”, если на 3 — “rd”, а в остальных случаях — “th”. Исключение составляют числа, которые оканчиваются на 11, 12 и 13. Для них используют суффикс “th”." Тема посвящена условным операторам, поэтому я решил использовать If и else if для решения задачи. Но при попытке ввести исключение в первую if, код сломался и стал выдавать все вводимые числа с суффиксом th.
int x;
string suf;
cin>>x;
int mod10=abs(x%10),mod100=abs(x%100);
if (mod100==11||12||13){
suf="th";
}
else if (mod10==4){
suf="st";
}
cout<<abs(x)<<suf<<endl;
Ответы (1 шт):
Ваше "сравнение"
if (mod100==11||12||13){
на самом деле означает
if (((mod100==11)||(12))||(13)){
т.е. mod100 никогда не сравнивается ни с 12, ни с 13. А поскольку при приведении к булеву типу вы получаете для ненулевых значений true, то
if (((mod100==11)||(true))||(true)){
всегда вычисляется как true.
Программист не должен быть ленивым :), пишите ясно
if (mod100==11||mod100==12||mod100==13){
или
if (mod100>=11 && mod100<=13){