Форум программистов, компьютерный форум CyberForum.ru

Выполнение второго аргумента или - C++

Восстановить пароль Регистрация
 
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
19.08.2013, 23:59     Выполнение второго аргумента или #1
Пример: (выражение1)||(выражение2)
Если первое выражение = 1 (true), то второе не выполняется и не проверяется. А мне нужно чтобы выполнялось.
Можно ли так сделать используя именно ||? Просто реализовал itoa
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
char* my_itoa(int num, char b[])
{ 
    char *save = b;
    bool plus_sign = true;
    int i;
    if (num<0)  
    {
        plus_sign = false;
        num=-num;   
    }
    while ((i=num % 10)||(num /= 10))
        *b++ = char(i+48);
    if (!plus_sign)
        *b++='-';
    *b='\0';
    return strrev(save);
}
Данные пример нерабочий из-за того, что в while не выполняется (num/=10). Да, я знаю что можно просто изменить конструкцию. Например do *b++=num%10+48; while (n/=10); Но интересут именно решение проблемы с выполнением второго выражения. Возможно ли?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
20.08.2013, 00:16     Выполнение второго аргумента или #2
у меня нет ошибки там где ты говоришь, только return strrev(save); не понимает, но если написать return save; прокатит
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
20.08.2013, 00:19  [ТС]     Выполнение второго аргумента или #3
Цитата Сообщение от soican Посмотреть сообщение
у меня нет ошибки там где ты говоришь, только return strrev(save); не понимает, но если написать return save; прокатит
зацикливание будет, а для strrev подключить нужно string.h
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
20.08.2013, 00:31     Выполнение второго аргумента или #4
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
Можно ли так сделать используя именно ||?
Нет. Так будет работать перегруженная функция operator||, но именно поэтому перегружать этот оператор точно не следует.
Разве что с помощью запятой можно приблизиться:
C++
1
while ((i=num % 10, num /= 10) || i)
Больше ничего не придумалось
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
20.08.2013, 00:40  [ТС]     Выполнение второго аргумента или #5
Цитата Сообщение от grizlik78 Посмотреть сообщение
while ((i=num % 10, num /= 10) || i)
это лишает алгоритм смысла
Цитата Сообщение от grizlik78 Посмотреть сообщение
Нет.
Вот это и хреново. Вроде как явный пример, когда "выполнение" второго аргумента нужно. (не проверка).
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
20.08.2013, 00:44     Выполнение второго аргумента или #6
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
это лишает алгоритм смысла
Почему? Фактически, это именно то, что требовалось: оба операнда вычисляются всегда и условие по результату логического сложения. Только записывается немного длиннее.
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
20.08.2013, 00:51  [ТС]     Выполнение второго аргумента или #7
Цитата Сообщение от grizlik78 Посмотреть сообщение
Почему? Фактически, это именно то, что требовалось: оба операнда вычисляются всегда и условие по результату логического сложения. Только записывается немного длиннее.
да, извиняюсь, ночь сказывается, жаль некрасиво смотрится, лучше тогда другую конструкцию применю
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
20.08.2013, 01:03     Выполнение второго аргумента или #8
А мне кажется, что конструкция do {} while() здесь даже лучше подходит. Например для num == 0 она выдаст 0, вместо пустоты из исходного варианта.
gore-lykovoe
 Аватар для gore-lykovoe
31 / 31 / 1
Регистрация: 04.04.2010
Сообщений: 414
20.08.2013, 01:16  [ТС]     Выполнение второго аргумента или #9
Цитата Сообщение от grizlik78 Посмотреть сообщение
А мне кажется, что конструкция do {} while() здесь даже лучше подходит. Например для num == 0 она выдаст 0, вместо пустоты из исходного варианта.
да, просто эта конструкция нагло сpiженна после, а моя репка додумалась только до while ( () || () ), вот и обидно...
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
20.08.2013, 10:15     Выполнение второго аргумента или #10
я б не зацикливался. if добавить и делов-то.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2013, 19:06     Выполнение второго аргумента или
Еще ссылки по теме:

C++ Зачем компилятору что-то упорядочивать после вычисления второго операнда логического "или"?
C++ Аналог передачи аргумента функции в С++
C++ Выполнение арифметические действи над двоичными, восьмеричными или шестнадцатеричными числами (по блок-схеме)

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
24.08.2013, 19:06     Выполнение второго аргумента или #11
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
А мне нужно чтобы выполнялось.
Можно ли так сделать используя именно ||?
Возвращаясь к исходному вопросу, хотя это уже и не очень актуально.
Что-то сразу не додумался.
Нужное поведение получится, если вместо логического или || использовать побитовое или |.
Yandex
Объявления
24.08.2013, 19:06     Выполнение второго аргумента или
Ответ Создать тему
Опции темы

Текущее время: 09:20. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru