Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как использовать конструкцию ?: в потоке cout, нужно вывести int 
V
    Опции темы
scroollocker
Дата 10.1.2011, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.{--}.



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 17.9.2010

Репутация: нет
Всего: нет



Привет. 
Есть такой код:
Код


#include <iostream>

int main()
{
 for (int i = 1; i<=100; i++)
  {
   std::cout << (!(i % 2) ? "Hello" : i) << std::endl; //вылазиит ошибка
  }
 return 0;
}



как можно через конструкцию ? : вставить i? Или как правильно все исправить, чтобы работало?
PM MAIL WWW ICQ Jabber   Вверх
Фантом
Дата 10.1.2011, 14:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вы это прекратите!
***


Профиль
Группа: Участник Клуба
Сообщений: 1516
Регистрация: 23.3.2008

Репутация: 4
Всего: 49



Возможные результаты тетрарного оператора должны иметь один и тот же тип. Соответственно, i надо превратить в строку. Какого-то совсем простого (и при этом универсального, не зависящего от компилятора) способа сделать это нет, поэтому проще воспользоваться банальным if'ом.
PM   Вверх
scroollocker
Дата 10.1.2011, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.{--}.



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 17.9.2010

Репутация: нет
Всего: нет



Спасибо. очень жалко(

Придется if'ать 


PM MAIL WWW ICQ Jabber   Вверх
Dov
Дата 10.1.2011, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 11
Всего: 88



Цитата(scroollocker @  10.1.2011,  13:18 Найти цитируемый пост)
как можно через конструкцию ? : вставить i? Или как правильно все исправить, чтобы работало?

можно так:
Код
int main()
{
    for (int i = 1; i<=100; i++)
    {
        !(i % 2) ? std::cout << "Hello\n" : std::cout << i << std::endl; 
    }
    return 0;
}



Это сообщение отредактировал(а) Dov - 23.3.2011, 17:04


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Modul
Дата 10.1.2011, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Цитата(scroollocker @  10.1.2011,  15:12 Найти цитируемый пост)
Спасибо. очень жалко(Придется if'ать 


И почему так тоскливо ?!!  smile 
Вы же не космический корабль запускаете в небо !

Мне видится, что возвращаемые результаты (например, функцией) должны
преимущественно иметь один тип.

А чем операторы if-else не подходят ? У них четкая логика и поддержка !
--------------------
I'll be back !
PM MAIL   Вверх
scroollocker
Дата 10.1.2011, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.{--}.



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 17.9.2010

Репутация: нет
Всего: нет



Modul,
Просто я хотел сделать что то ввиде такого:
Код


int main()
 {
  for (int i = 1; i<=100; i++)
   {
    std::cout << (!(i % 2) ? "Hello" : 
                 (!(i % 5) ? "World" : 
                 ((!(i % 2) && !(i % 5)) ? "Hello World" : i )))
              << std::endl;         
   }    
  return 0;
 } 
 
 

красиво, и компактно, а придется так:

Код


int main()
{
 for (int i = 1; i<=100; i++)
  { 
   if (!(i%5) && !(i%3))   
    std::cout << "Hello World" << std::endl;  
   else if (!(i%3))       
    std::cout << "Hello" << std::endl;
   else if (!(i%5))   
    std::cout << "World" << std::endl; 
   else
    std::cout << i << std::endl;       
  }
 return 0;



Проблема возникла из за красоты кода.  smile  Но благодаря этому, понял как работает тетрарный оператор  smile 
PM MAIL WWW ICQ Jabber   Вверх
azesmcar
Дата 10.1.2011, 21:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 52
Всего: 211



Цитата(scroollocker @  10.1.2011,  21:06 Найти цитируемый пост)
Проблема возникла из за красоты кода

ты случайно не это красивым кодом считаешь? smile 
Цитата(scroollocker @  10.1.2011,  21:06 Найти цитируемый пост)
std::cout << (!(i % 2) ? "Hello" : 
                 (!(i % 5) ? "World" : 
                 ((!(i % 2) && !(i % 5)) ? "Hello World" : i )))
              << std::endl;     


Добавлено через 48 секунд
краткость и красота в программировании не синонимы.
PM   Вверх
scroollocker
Дата 10.1.2011, 21:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.{--}.



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 17.9.2010

Репутация: нет
Всего: нет



Скорее тут мне нужна была компактность.  А красота написания тоже бы не помешала
PM MAIL WWW ICQ Jabber   Вверх
Modul
Дата 10.1.2011, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 238
Регистрация: 17.2.2006

Репутация: нет
Всего: нет



Цитата(scroollocker @  10.1.2011,  21:14 Найти цитируемый пост)
Скорее тут мне нужна была компактность.


Вам надо изучать язык, верно ведь ?!!

Цитата(scroollocker @  10.1.2011,  21:14 Найти цитируемый пост)
 А красота написания тоже бы не помешала


А что такое красота в программинге ?

Нужны определенные технические критерии.
--------------------
I'll be back !
PM MAIL   Вверх
scroollocker
Дата 10.1.2011, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.{--}.



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 17.9.2010

Репутация: нет
Всего: нет



Modul, 

Цитата

 Вам надо изучать язык, верно ведь ?!!


Это Верно. 

Хотел испробывать свои силы, но вот так сразу не получилось. 

Вы правы, что настоящая красота кода заключается в технических критериях, и правильности его написания. Но а если это, правильно реализованное, записать в одну строчку. оно будит правильно, но не совсем читабельно. В моем случае имелось ввиду это. Но зачем спорить, когда уже все решено.
Всем спасибо за ответы!  smile 
PM MAIL WWW ICQ Jabber   Вверх
bsa
Дата 12.1.2011, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(scroollocker @  10.1.2011,  22:57 Найти цитируемый пост)
Вы правы, что настоящая красота кода заключается в технических критериях, и правильности его написания. Но а если это, правильно реализованное, записать в одну строчку. оно будит правильно, но не совсем читабельно. В моем случае имелось ввиду это. Но зачем спорить, когда уже все решено.

К правильности и корректности кода понятие "красота кода" отношения не имеет. Красивый код, это когда логика его работы очевидна из написанного, и нет необходимости сидеть и раскладывать сложное действие. Оформление кода
PM   Вверх
xvr
Дата 13.1.2011, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Еще один момент:
Код

 std::cout << (!(i % 2) ? "Hello" : i) << std::endl;
Тут вы пытаетесь поочередно сделать std::cout << "Hello" и  std::cout << i, что раскрывается компилятором в 
Код

std::cout.operator<<("Hello"); // std::cout::operator<<(const char*);
и
std::cout.operator<<(i); // std::cout::operator<<(int);

Т.е. проблема не только в том, что оператор '?' не может вернуть разные типы, а в том, что в вашем цикле должны попеременно вызываться разные методы объекта std::cout (хотя из кода это в глаза не бросается)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0923 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.