По сути, ветвь if ( flip() == 0)
оператора if и ветвь else if ( flip() )
будут выполнять flip()
отдельно. Это означает, что те крайние случаи, когда программа действует неожиданно, вызваны тем, что две ветви возвращают разные числа.
Однако, если вы настаиваете на добавлении другой ветви или для любого другого, кто может столкнуться с этим ответом с той же проблемой, самое простое решение, о котором я могу подумать, будет:
Сохранить возвращаемое значение в переменной
Простого определения переменной в начале цикла for для хранения результата этой итерации flip()
и проверки этого будет достаточно для того, что вы пытаетесь выполнить.
В частности, я бы объявил переменную перед началом цикла (int result;
) и переопределил ее в начале каждой итерации цикла, чтобы каждый раз вызывать функцию. (result = flip();
до рассматриваемого оператора if)
Другое решение было бы:
Использовать оператор смены
Операторы switch являются своего рода модифицированными операторами if / else, за исключением того, что они проверяют множество различных случаев на одном, например
switch ( flip() ) // test against the result of flip()
{
// if it happens to be zero
case 0:
tails++;
printf("Tails ");
break;
// the break statement tells the program to stop this case
// if it happens to be one
case 1:
heads++;
printf("Heads ");
break;
}
Хотя это может показаться слишком сложным, если вы решите отказаться от переменного маршрута, я думаю, что операторы переключателя утилиты могут добавить в ваши программы, что того стоит. (особенно если их много)
TLDR: flip()
вызывается дважды, см. Под заголовками решения и выше для объяснения.