Проблемы с переменными типа bool в компараторе if else - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь сделать систему улучшений в своей игре. Я использую 3 переменные типа bool (для 3 разных видов оружия). У меня возникли проблемы с созданием компаратора if else, который будет смотреть, какие переменные bool являются истинными / ложными (какое оружие у вас есть, а какое нет), и перенаправит вас к соответствующему сценарию боя. Компаратор if else не работает независимо от того, какое у вас оружие. Он автоматически переходит в "else" часть утверждения (где вы go, если у вас нет оружия). Я включил упрощенную версию только с одной переменной типа bool. Пожалуйста, помогите.

#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int choice;
    int choice2;
    bool weapon1 = false;
    
    start:
    printf("Where would you like to go? 1. Store  2. Arena: ");
    scanf("%d", &choice);
    if (choice == 1) {
        printf("You got weapon1 from the store \n");
        bool weapon1 = true;
        goto start;
    }
    else if (choice == 2) {
        printf("You went to the arena\n");
        if (weapon1) {
            printf("You won the battle because you had a weapon\n");
            exit(0);
        }
        else {
            printf("You lost the battle because you did not have a weapon\n");
            exit(0);
        }
    }
    

    return 0;
}


Ответы [ 3 ]

3 голосов
/ 06 августа 2020

Запись bool weapon1 = true; внутри фигурных скобок, связанных с if (choice == 1), определяет новый weapon1, не связанный с более ранним weapon1.

Замените его на weapon1 = true;, который присваивается более раннему weapon1 без определения нового weapon1.

Включите все или большинство предупреждающих сообщений в вашем компиляторе и обратите на них внимание.

0 голосов
/ 07 августа 2020

Использование goto в C (с некоторыми исключениями до конца функции) считается ужасной практикой

Когда вы определили переменную, вы не должны использовать ее тип в начале присвоения как новое определение. Вместо bool weapon1 = true; делать weapon1 = true;

#include <stdbool.h>
#include <stdio.h>

int main() 
{
    int choice;
    int choice2;
    bool weapon1 = false;
    bool endgame = false;

    do
    {
        printf("Where would you like to go? 1. Store  2. Arena: ");
        scanf("%d", &choice);
        switch(choice)
        {
            case 1:
                printf("You got weapon1 from the store \n");
                weapon1 = true;
                break;
            case 2:
                if (weapon1) printf("You won the battle because you had a weapon\n");
                else  printf("You lost the battle because you did not have a weapon\n");
                endgame = true;
                break;
            default: 
                break;                
        }
    }while(!endgame);
}
0 голосов
/ 06 августа 2020

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

#include <stdbool.h>

#include <stdio.h>

#include <stdlib.h>

int main() {
  int choice;
  int choice2;
  bool weapon1 = false;

  start:
    printf("Where would you like to go? 1. Store  2. Arena: ");
  scanf("%d", & choice);
  if (choice == 1) {
    printf("You got weapon1 from the store \n");
    weapon1 = true;
    goto start;
  } else if (choice == 2) {
    printf("You went to the arena\n");
    if (weapon1) {
      printf("You won the battle because you had a weapon\n");
      exit(0);
    } else {
      printf("You lost the battle because you did not have a weapon\n");
      exit(0);
    }
  }

  return 0;
}
...