Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.09.2019, 17:09   #1
bugs_bunny
Пользователь
 
Регистрация: 26.07.2019
Сообщений: 10
По умолчанию Не работает else if

Здравтсвуйте. Написал код сравнения трех чисел. Но код сравнивет, почему-то числа от 1 до 3 и от 7 до (не проверял). Точнее, не работает блок кода, когда a==b, a==c. Вобщем равенства, кроме последнего a==b && b==c. Вот код:
Код:
#include <stdio.h>
int main ()
{
   int a,b,c;
   scanf("%d%d%d",&a,&b,&c);
/*compare two number, first and second*/
   if (a>b && a>c){if (b>c){printf("%d>%d, ",a,b), printf("%d>%d, ",a,c), printf("%d>%d\n",b,c);}
/*compare two number, second and threed*/
                    else if (c>b){printf("%d>%d, ",a,b), printf("%d>%d, ",a,c),  printf("%d>%d\n",c,b);}}
/* */
   else if (b>a && b>c){if(a>c){printf("%d>%d, ",b,a),printf("%d>%d, ",b,c),printf("%d>%d\n",a,c);}
                        else if(c>a){printf("%d>%d, ",b,a),printf("%d>%d, ",b,c),printf("%d>%d\n",c,a);}}
   /* */
   else if (c>a && c>b){if(a>b){printf("%d>%d, ",c,a),printf("%d>%d, ",c,b),printf("%d>%d\n",a,b);}
                        else if(b>a){printf("%d>%d, ",c,a),printf("%d>%d, ",c,b),printf("%d>%d\n",b,a);}}
   /* */
   else if (a==b && a>c){printf("%d=%d, ", a, b), printf("%dand%d>%d\n", a, b, c);}
   else if (a==c && a>b){printf("%d=%d, ", a, c), printf("%dand%d>%d\n", a, c, b);}
   else if (b==c && b>a){printf("%d=%d, ", b, c), printf("%dand%d>%d\n", b, c, a);}
   /* */
   else if (a==b && a<c){printf("%d=%d, ", a, b), printf("%dand%d<%d\n", a, b, c);}
   else if (a==c && a<c){printf("%d=%d, ", a, c), printf("%dand%d<%d\n", a, c, b);}
   else if (b==c && b<a){printf("%d=%d, ", b, c), printf("%dand%d<%d\n", b, c, a);}
   /* */
   else if (a==b && b==c){printf("%d=%d=%d \n", a, b, c);}
   /*else printf("%d<%d \n", a, b);*/
return 0;
}
Previous thank you.
bugs_bunny вне форума Ответить с цитированием
Старый 10.09.2019, 17:52   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

зачем такой ужасный код то?!

ошибки в логике.
ну, например.
рассмотрим первый блок.

Цитата:
Код:
   if (a>b && a>c){if (b>c){printf("%d>%d, ",a,b), printf("%d>%d, ",a,c), printf("%d>%d\n",b,c);}
/*compare two number, second and threed*/
                    else if (c>b){printf("%d>%d, ",a,b), printf("%d>%d, ",a,c),  printf("%d>%d\n",c,b);}}
первое условие
число a самое большое.
ок. выполняется блок
Цитата:
Код:
if (b>c){...}
else if (c>b){...}
а что будет - если b равно c ? а ничего не будет.

и дальше, там, где Вы пытаетесь проверить числа на равенство, там тоже нет блока, где a больше, а b == с
это то, что как бы сразу видно.

но не уверен, что в этой простыне не ещё нет других косяков!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.09.2019, 18:03   #3
bugs_bunny
Пользователь
 
Регистрация: 26.07.2019
Сообщений: 10
По умолчанию

"а что будет - если b равно c ? а ничего не будет" - т.е. в одной строке мне прописывать все возможные варианты? Но почему-то равенство первых двух variables работает с числами старше 7?
bugs_bunny вне форума Ответить с цитированием
Старый 10.09.2019, 21:38   #4
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

блиииин ... А может проще организовать массив ссылок, пробежаться по нему и сравнить значения?? коды будет меньше да и читабельнее получится.
Изображения
Тип файла: jpg b0QXNna.jpg (18.5 Кб, 55 просмотров)
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 10.09.2019, 22:18   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от bugs_bunny Посмотреть сообщение
.е. в одной строке мне прописывать все возможные варианты?
Скажите, какую задачу Вы пытаетесь решить этим кодом?

я бы отсортировал числа и спокойно их вывел.
Это было бы просто и надёжно.

а так, получается ужас ужасный..
типа такого
Код:
#include <stdio.h>
int main ()
{
   int a,b,c;
   scanf("%d%d%d",&a,&b,&c);
   if (a>b && a>c){
     // a max
     if (b>c){printf("%d>%d, %d>%d, %d>%d\n",a,b,a,c,b,c);}
     else if (c>b){ printf("%d>%d, %d>%d, %d>%d\n",a,b, a,c,c,b);}
     else { printf("%d>%d, %d>%d, %d=%d\n",a,b, a,c,c,b);}
   }
   else if (b>a && b>c){
     // b max
     if (a>c){printf("%d>%d, %d>%d, %d>%d\n",b,a,b,c,a,c);}
     else if (c>a){ printf("%d>%d, %d>%d, %d>%d\n",b,a, b,c,c,a);}
     else { printf("%d>%d, %d>%d, %d=%d\n",b,a, b,c,c,a);}
   }
   else if (c>a && c>b){
     // с max
     if (b>a){printf("%d>%d, %d>%d, %d>%d\n",c,a,c,b,b,a);}
     else if (a>b){ printf("%d>%d, %d>%d, %d>%d\n",c,a,c,b,b,a);}
     else { printf("%d>%d, %d>%d, %d=%d\n",c,a,c,b,b,a);}
   }
   else if (a==b && b==c){printf("%d=%d=%d \n", a, b, c);}
   else if (a==b){
     if (a>c){printf("%d=%d, %d>%d, %d>%d\n",a,b,a,c,b,c);}
     else { printf("%d>%d, %d>%d, %d=%d\n",c,a, c,b,a,b);}
   }
   else if (b==c){
     if (b>a){printf("%d=%d, %d>%d, %d>%d\n",b,c,b,a,c,a);}
     else { printf("%d>%d, %d>%d, %d=%d\n",a,b, a,c,b,c);}
   }
   else if (a==c){
     if (a>b){printf("%d=%d, %d>%d, %d>%d\n",a,c,a,b,c,b);}
     else { printf("%d>%d, %d>%d, %d=%d\n",b,a, b,c,a,c);}
   }
return 0;
}
проверить работу - https://ideone.com/WqEYWR
Serge_Bliznykov вне форума Ответить с цитированием
Старый 11.09.2019, 15:03   #6
bugs_bunny
Пользователь
 
Регистрация: 26.07.2019
Сообщений: 10
По умолчанию

Спасибо,"Serge_Bliznykov". Почему-то не смог в выводе printf задать три (четыре) переменные, поэтому у меня такой код. Два вопроса, м.б. не в тему. Возможно ли задать в условии if () два логических оператора (z.e. ... && ... && ...). И второй вопрос: возможны ли вложенные тернарные операторы? Заранее спасибо.
bugs_bunny вне форума Ответить с цитированием
Старый 11.09.2019, 15:14   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от bugs_bunny Посмотреть сообщение
Возможно ли задать в условии if () два логических оператора (z.e. ... && ... && ...)
конечно, хоть 22.


Цитата:
Сообщение от bugs_bunny Посмотреть сообщение
И второй вопрос: возможны ли вложенные тернарные операторы?
Да.
например,
Код:
	int a=1, b=2, c=3;
	printf((a>b)?"a>b":(c>b?"a<=b и c>b":"и a<=b c<=b"));
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
QUdpSocket работает только при локальном IP. Не работает если указан динамичесский айпи kook163 Qt и кроссплатформенное программирование С/С++ 5 09.05.2018 22:40
Не работает анимация. Механизм работает лишь при изменения числа в едит1. Студент ММИ Помощь студентам 1 18.05.2015 07:39
Программа на Visual C# работает при запуске руками, но не работает при попытки автоматического запуска Bug$ Помощь студентам 18 21.10.2013 16:22
не работает relese версия проги и debug работает тока на моем компе D][mon C# (си шарп) 2 04.05.2012 20:21
Почему программа на С++ не работает с локальным описанием массива, но работает с глобальным? >>STINGER<< Помощь студентам 4 08.03.2011 09:56