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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
#1

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

19.08.2013, 23:59. Просмотров 396. Ответов 10
Метки нет (Все метки)

Пример: (выражение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); Но интересут именно решение проблемы с выполнением второго выражения. Возможно ли?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.08.2013, 23:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Выполнение второго аргумента или (C++):

Напишите функцию, принимающую два аргумента, изменяющую значение второго аргумента и возвращающую void - C++
Помогите, пожалуйста:( Напишите функцию add_tax типа void. У нее два формальных параметра: taxRate, значение которого представляет налог...

Создать функцию, имеющую два аргумента и возвращающую в качестве аргумента число из отрезка [a,b] - C++
Создать функцию, которая будет иметь два целочисленных параметра a и b, и в качестве своего значения возвращать случайное целое число из...

Разница в скорости выполнение программы C++ или C# - C++
И так здравствуйте,хотелось бы узнать почему в данном случае(то есть использование stl) c++ медленнее c# ,запускаю из релиза ...

Для заданных значений аргумента Х вычислить значения суммы S и функции Y или Z. Вычисление S произвести с точностью E - C++
Составить программы в среде Dev -C++ 1. Для заданных значений аргумента Х вычислить значения суммы S и функции Y или Z. Вычисление S...

Сделать запрос на выход или повторное выполнение - C++
Здравствуйте, есть небольшая проблема, у меня есть программка, и мне надо, чтобы после вывода всех результатов, он запрашивал &quot;хотите...

Выполнение арифметические действи над двоичными, восьмеричными или шестнадцатеричными числами (по блок-схеме) - C++
Написать программу, позволяющую выполнять арифметические действия над двоичными, восьмеричными или шестнадцатеричными числами. Систему...

10
soican
49 / 23 / 1
Регистрация: 16.11.2011
Сообщений: 329
Записей в блоге: 5
20.08.2013, 00:16 #2
у меня нет ошибки там где ты говоришь, только return strrev(save); не понимает, но если написать return save; прокатит
0
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
20.08.2013, 00:19  [ТС] #3
Цитата Сообщение от soican Посмотреть сообщение
у меня нет ошибки там где ты говоришь, только return strrev(save); не понимает, но если написать return save; прокатит
зацикливание будет, а для strrev подключить нужно string.h
0
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
20.08.2013, 00:31 #4
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
Можно ли так сделать используя именно ||?
Нет. Так будет работать перегруженная функция operator||, но именно поэтому перегружать этот оператор точно не следует.
Разве что с помощью запятой можно приблизиться:
C++
1
while ((i=num % 10, num /= 10) || i)
Больше ничего не придумалось
1
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
20.08.2013, 00:40  [ТС] #5
Цитата Сообщение от grizlik78 Посмотреть сообщение
while ((i=num % 10, num /= 10) || i)
это лишает алгоритм смысла
Цитата Сообщение от grizlik78 Посмотреть сообщение
Нет.
Вот это и хреново. Вроде как явный пример, когда "выполнение" второго аргумента нужно. (не проверка).
0
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
20.08.2013, 00:44 #6
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
это лишает алгоритм смысла
Почему? Фактически, это именно то, что требовалось: оба операнда вычисляются всегда и условие по результату логического сложения. Только записывается немного длиннее.
1
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
20.08.2013, 00:51  [ТС] #7
Цитата Сообщение от grizlik78 Посмотреть сообщение
Почему? Фактически, это именно то, что требовалось: оба операнда вычисляются всегда и условие по результату логического сложения. Только записывается немного длиннее.
да, извиняюсь, ночь сказывается, жаль некрасиво смотрится, лучше тогда другую конструкцию применю
0
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
20.08.2013, 01:03 #8
А мне кажется, что конструкция do {} while() здесь даже лучше подходит. Например для num == 0 она выдаст 0, вместо пустоты из исходного варианта.
0
gore-lykovoe
32 / 32 / 1
Регистрация: 04.04.2010
Сообщений: 414
20.08.2013, 01:16  [ТС] #9
Цитата Сообщение от grizlik78 Посмотреть сообщение
А мне кажется, что конструкция do {} while() здесь даже лучше подходит. Например для num == 0 она выдаст 0, вместо пустоты из исходного варианта.
да, просто эта конструкция нагло сpiженна после, а моя репка додумалась только до while ( () || () ), вот и обидно...
0
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
20.08.2013, 10:15 #10
я б не зацикливался. if добавить и делов-то.
0
grizlik78
Эксперт С++
1956 / 1449 / 115
Регистрация: 29.05.2011
Сообщений: 3,007
24.08.2013, 19:06 #11
Цитата Сообщение от gore-lykovoe Посмотреть сообщение
А мне нужно чтобы выполнялось.
Можно ли так сделать используя именно ||?
Возвращаясь к исходному вопросу, хотя это уже и не очень актуально.
Что-то сразу не додумался.
Нужное поведение получится, если вместо логического или || использовать побитовое или |.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.08.2013, 19:06
Привет! Вот еще темы с ответами:

Зачем компилятору что-то упорядочивать после вычисления второго операнда логического "или"? - C++
Стандарт: То есть: если второй оператор вычислен, вычисление каждого выражения и побочный эффект, связанный с первым выражением...

Выходной поток первого числа, второго , суммы первого и второго чисел - C++
Здравствуйте! Помогите пожалуйста написать программу, которая через стандартный входной поток принимает текстовые строки, в каждой из...

Как из первого класса достучаться до объекта второго, а из второго до метода первого? - C++
Есть два класса. Как можно из drawCircle достучаться до x,y,R, и из DrawNCirles дстучаться до drawCircle? class Data { public: int...

Найти ОДЗ аргумента, написать процедуру или функцию которая вычисляет одз аргумента х - Turbo Pascal
помогите сделать пожалуйста


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
24.08.2013, 19:06
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru