Почему этот тест всегда возвращает false? - PullRequest
0 голосов
/ 11 июля 2019

Пожалуйста, игнорируйте контекст этого кода. Идея была функция с именем shop() будет принимать два параметра (money_in_pocket, age) и определите, будут ли эти значения пустите их в магазин Rolex. Однако даже когда параметры соответствуют требованиям оператора if в shop(), программа переходит к выводу «Выйти!» - смысл покинуть магазин.

Как вы могли заметить, я новичок в языке, поэтому любой помощь будет высоко ценится.

Я пытался сделать параметры намного больше, чем if Заявления просит их быть. Это выведено "уйти!", Так Я пробовал параметры, которые не соответствовали требованиям и тот же вывод был отображен ...

#include <iostream>

using namespace std;

class rolex{

   public:
      bool shop(int x, int y){
         if((x >= 5000 && y>= 18)||(x>=5000 && y<18)){
            bool enterence = true;
         }else{
            bool enterence = false;
         };
         return enterence;
      }
   private:
      bool enterence;
};

int main()
{
   rolex objj;

   if( objj.shop(5000, 18) == true){
      cout<<"you may enter"<<endl;
   }else{
      cout<<"LEAVE"<<endl;
   }
   return 0;
}

Ответы [ 2 ]

5 голосов
/ 11 июля 2019

В операторе if

     if((x >= 5000 && y>= 18)||(x>=5000 && y<18)){
        bool enterence = true;
     }else{
        bool enterence = false;
     };

вы объявили две локальные переменные, которые не будут активны после выхода из оператора if.

Таким образом, элемент данных rolex::enterence не инициализирован и имеет неопределенное значение.

Изменить оператор if на

     if((x >= 5000 && y>= 18)||(x>=5000 && y<18)){
        enterence = true;
     }else{
        enterence = false;
     };

Учтите, что условие в операторе if эквивалентно

     if( x >= 5000 ){

Вы можете просто написать вместо оператора if

enterence = x >= 5000;

или

rolex::enterence = x >= 5000;
0 голосов
/ 11 июля 2019

Вот простое редактирование вашей программы, которая работает так, как вы планировали:

#include <iostream>
using namespace std;


class rolex {

    private:
        bool entrance;

    public:
      bool shop(int x, int y) {
          if(x >= 5000 && y>= 18) {
              entrance = true;
          } else {
              entrance = false;
          }
          return entrance;
      }
};


int main() {
    rolex obj;

    if(obj.shop(5000, 18) == true) {
        cout << "you may enter" << endl;
    } else {
        cout << "LEAVE" << endl;
    }
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...