Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 10.09.2019, 18:09   #1
bugs_bunny
 
Регистрация: 26.07.2019
Сообщений: 5
Репутация: 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, 18:52   #2
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,847
Репутация: 5617
По умолчанию

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

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

Цитата:
Код:
   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, 19:03   #3
bugs_bunny
 
Регистрация: 26.07.2019
Сообщений: 5
Репутация: 10
По умолчанию

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

icq: 359393755
По умолчанию

блиииин ... А может проще организовать массив ссылок, пробежаться по нему и сравнить значения?? коды будет меньше да и читабельнее получится.
Изображения
 
__________________
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
Если помог - нажми на весы
WorldMaster вне форума   Ответить с цитированием
Старый 10.09.2019, 23:18   #5
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 25,847
Репутация: 5617
По умолчанию

Цитата:
Сообщение от 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, 16:03   #6
bugs_bunny
 
Регистрация: 26.07.2019
Сообщений: 5
Репутация: 10
По умолчанию

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

Цитата:
Сообщение от 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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
QUdpSocket работает только при локальном IP. Не работает если указан динамичесский айпи kook163 Qt и кроссплатформенное программирование С/С++ 5 09.05.2018 23:40
Не работает анимация. Механизм работает лишь при изменения числа в едит1. Студент ММИ Помощь студентам 1 18.05.2015 08: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 10:56


05:26.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.