C: Как вы вызываете функцию при условии без использования if-else?

В моем введении в cs мне сказали написать программу без использования операторов if\else или (a?b-c), и они дали нам функцию int something() - не принимает значения - которая печатает что-то в качестве возврата. Я хочу использовать эту функцию при некоторых условиях, но я не могу понять, как я буду вызывать ее без использования if{}.

Любая помощь приветствуется Спасибо


person Saqqura Chan    schedule 05.05.2018    source источник
comment
Вы отметили это короткое замыкание, так что кажется, что вы уже знаете (или вам подсказали) одно возможное решение.   -  person interjay    schedule 05.05.2018
comment
Разрешено ли вам использовать другие структуры потока управления? Циклы, операторы переключения?   -  person Daniel H    schedule 05.05.2018


Ответы (3)


Я не знаю, какое решение они имели в виду, но поскольку ваша функция возвращает int, вы можете использовать ускоренную оценку:

int ignoreAnd = (oneNumber == anotherNumber) && someFunction();
int ignoreOr  = (oneNumber != anotherNumber) || someFunction();

В первом случае функция будет вызываться только тогда, когда условие истинно; во втором случае функция будет вызываться только тогда, когда условие ложно.

person Sergey Kalinichenko    schedule 05.05.2018
comment
Я думаю, что int ignore = (yourCondition == somethingElse) && someFunction(); было бы лучше. - person haccks; 05.05.2018
comment
@hackks Правильно, я редактировал, чтобы добавить вторую альтернативу, и добавил круглые скобки, чтобы украсить пример. Благодарю вас! - person Sergey Kalinichenko; 05.05.2018
comment
Вероятно, это решение, которое они имели в виду, учитывая, что вопрос помечен как короткое замыкание. Вероятно, есть какой-то контекст, о котором ОП нам не говорит. - person interjay; 05.05.2018
comment
@interjay Вы правы, я не заметил метку при первом чтении, но поскольку метка есть, должно быть, студентам был дан какой-то намек на ожидаемое решение. - person Sergey Kalinichenko; 05.05.2018
comment
Не могли бы вы объяснить, почему это работает? мне кажется, что вы присваиваете значение новой переменной в зависимости от того, истинно оно или ложно, но я не понимаю, почему оно на самом деле вызывает функцию? - person Saqqura Chan; 05.05.2018
comment
@SaqquraChan По сути, x = cond1 && cond2 работает как if (cond1) { if (cond2) { x = 1; } else { x = 0; } } else { x = 0; } в том смысле, что cond2 выполняется только в том случае, если cond1 сначала true. Точно так же y = cond1 || cond2 работает как if (cond1) { y = 1; } else if (cond2) { y = 1; } else { y = 0; } в том смысле, что cond2 выполняется, только если cond1 сначала имеет значение false. См. && (логическое И) и || (логическое ИЛИ) для получения дополнительной информации. - person ; 06.05.2018

Я бы использовал оператор switch вместо if else.

person calmchess    schedule 05.05.2018

Вы можете использовать циклы при использовании оператора break в конце, чтобы гарантировать, что он будет выполнен только один раз, а не в цикле. Для цикла:

for(;(a==b);)
{
    myFunc();
    break;// to make this loop execute only once.
}

Пока цикл:

while(a==b){
    myFunc();
    break;
 }
person Community    schedule 05.05.2018