неправильно работает логическая операция ИЛИ

Рейтинг: -2Ответов: 1Опубликовано: 07.05.2023

У меня возникла проблема с использованием операции ИЛИ в условном операторе 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;

Ответы

▲ 6

Ваше "сравнение"

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){