#c #if-statement #boolean
#c #if-оператор #логическое
Вопрос:
Я пытаюсь создать игру с 6 миссиями (считая руководство) в ней. Существует 6 переменных bool, по одной для каждой миссии. Компаратор if else проверяет, какие переменные являются истинными, и отправляет вас в соответствующую миссию. Компаратор работает достаточно хорошо, если только 1 переменная имеет значение true, но если несколько переменных имеют значение true, то это не так. Вот более упрощенная версия кода, которая выдает ту же ошибку.
#include <stdio.h>
#include <stdbool.h>
int main()
{
bool tutorial = true;
bool mission1 = true;
bool mission2 = true;
if (tutorial) {
printf("It does not work");
}
else if (tutorial, mission1) {
printf("It does work");
}
else {
printf("It doesn't work");
}
}
Что должно произойти, так это то, что программа выводит «Это работает». Вместо этого он выводит сообщение «Это не работает». Хотя я знаю, что если бы я хотел, чтобы программа печатала только средний вариант, я бы поставил
#include <stdio.h>
#include <stdbool.h>
int main()
{
bool tutorial = true;
bool mission1 = true;
bool mission2 = true;
if (tutorial, mission1) {
printf("It does not work");
}
}
Это также помешало бы вам сыграть более 1 миссии. Пожалуйста, помогите.
Комментарии:
1. Что вы пытаетесь сделать? Каков ожидаемый результат
tutorial, mission1
? Возможно, вы захотите подробнее прочитать об операторе запятой и о том, что он на самом деле делает.2. Вы должны использовать либо
tutorial amp;amp; mission
, либоtutorial || mission
для реализации логической комбинации значений.3. Но это не решит вашу проблему, потому что
if (tutorial)
завершится успешно до того, как он выполнит любой из других тестов.4. Возможно, вы захотите провести некоторое исследование о том, действительно ли работают цепочки hof
if ... else if
.5. Вместо множества
if
утверждений вы могли бы рассмотреть возможность использования таблицы истинности.
Ответ №1:
Утверждение if (tutorial, mission1)
означает не то, что вы думаете. В этом операторе tutorial, mission1
используется выражение через запятую.
Выражение с запятой вычисляется путем вычисления того, что осталось от запятой, отбрасывания результата, затем вычисления того, что находится справа от общего.
Итак, вы оцениваете tutorial
, отбрасываете результат, затем оцениваете mission1
. Следовательно, результат такой же, как если бы вы только что написали if (mission1)
.
Возможно, вы имели в виду if (tutorial amp;amp; mission1)
или if (tutorial || mission1)
.
Ответ №2:
Чтобы проверить, что руководство завершено, а миссии 1 и 2 не были завершены, вам нужно будет написать:
if (tutorial amp;amp; !mission1 amp;amp; !mission2) {
printf("tutorial completed, mission 1 and 2 not completed");
}
Ответ №3:
Я думаю, вам следует использовать ‘amp;amp;’ вместо ‘,’ чтобы строка выглядела примерно так:
if (tutorial amp;amp; mission1){
Это проверит, установлены ли для обоих turorial и mission1 значение true