为什么此测试总是返回false?

时间:2019-07-11 16:51:43

标签: c++ variables if-statement scope

请忽略此代码的上下文。这个想法是  名为shop()的函数将采用两个参数  (money_in_pocketage)并确定这些值是否会  让他们进入劳力士商店。但是,即使  参数符合if语句中的要求  shop(),程序继续输出“ Leave!”-  意思是离开商店。

您可能已经注意到,我是该语言的新手,所以任何  帮助将不胜感激。

我尝试使参数远远大于if  声明要求他们成为。输出为“ leave!”,因此 我尝试了不符合要求的参数,  显示了相同的输出...

#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 个答案:

答案 0 :(得分:5)

在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;

答案 1 :(得分:0)

这是对程序的简单编辑,可以按预期工作:

#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;
}