【问题标题】:C++ Poker: skipping over If statements, and disregarding values [closed]C++ Poker:跳过 If 语句,忽略值 [关闭]
【发布时间】:2015-04-09 23:30:48
【问题描述】:

我一直在用 C++ 创建扑克,我注意到在我确定(或者我认为)玩家的手牌后,它总是显示为皇家同花顺(或 9,就手牌排名而言)。我对其进行了测试,结果发现用于确定手牌的 if 语句被跳过了。为什么这些语句没有注册,如何解决?附言我知道这段代码有点长,如果你不想看,请继续。

    int hand_ranking = 0;
        bool one_pair_bool;
        int one_pair;


        bool two_pair_bool;
        int two1_pair;
        int two2_pair;

        if (min_all == min2_all){
            one_pair = min_all;
            one_pair_bool = true;


            if (mid_card == max2_all){
                two_pair_bool = true;
                two1_pair = min_all;
                two2_pair = mid_card;

            }

            else if (max2_all == max_all){
                two_pair_bool = true;
                two1_pair = min_all;
                two2_pair = max2_all;

            }
            else{
                two_pair_bool = false;
            }
        }
        else if (min2_all == mid_card){
            one_pair = min2_all;
            one_pair_bool = true;

            if (max2_all == max_all){
                two_pair_bool = true;
                two1_pair = min2_all;
                two2_pair = max2_all;
            }

            else {
                two_pair_bool = false;
            }
        }
        else if (mid_card == max2_all){
            one_pair = mid_card;
            one_pair_bool = true;

            if (min_all == min2_all){
                two_pair_bool = true;
                two1_pair = mid_card;
                two2_pair = min_all;
            }
            else{
                two_pair_bool = false;
            }
        }
        else if (max2_all == max_all){
            one_pair = max2_all;
            one_pair_bool = true;

            if (min_all == min2_all){
                two_pair_bool = true;
                two1_pair = max2_all;
                two2_pair = min_all;
            }
            else if (min2_all == mid_card){
                two_pair_bool = true;
                two1_pair = max2_all;
                two2_pair = min2_all;
            }
            else{
                two_pair_bool = false;
            }
        }
        else{
            one_pair_bool = false;
        }



        bool three_of_a_kind;
        int three_of_a_kind_number;

        if (min_all == min2_all && min2_all == mid_card){
            three_of_a_kind = true;
            three_of_a_kind_number = min_all;
        }

        else if (min2_all == mid_card && mid_card == max2_all){
            three_of_a_kind = true;
            three_of_a_kind_number = min2_all;
        }

        else if (mid_card == max2_all && max2_all == max_all){
            three_of_a_kind = true;
            three_of_a_kind_number = mid_card;
        }

        else {
            three_of_a_kind = false;
        }


        bool straight;
        int straight_start;

        if (min_all == min2_all - 1 && min2_all == mid_card - 1 && mid_card == max2_all - 1 && max2_all == max_all - 1){
            straight = true;
            straight_start = min_all;
        }
        else {
            straight = false;
        }

        bool flush;
        char flush_suit;

        if (min_suit == min2_suit == mid_suit == max2_suit == max_suit){
            flush = true;
            flush_suit = min_suit;
        }

        bool full_house;
        int full_house2;
        int full_house3;

        if (min_all == min2_all && min2_all == mid_card){
            if (max2_all == max_all){
                full_house = true;
                full_house2 = max2_all;
                full_house3 = min_all;
            }
        }

        else if (min2_all == mid_card && mid_card == max2_all){

        }

        else if (mid_card == max2_all && max2_all == max_all){
            if (min_all == min2_all){
                full_house = true;
                full_house2 = min_all;
                full_house3 = mid_card;
            }
        }

        else {

        }

        bool four_of_a_kind;
        int four_of_a_kind_number;

        if (min_all == min2_all - 1 && min2_all == mid_card - 1 && mid_card == max2_all - 1){
            four_of_a_kind = true;
            four_of_a_kind_number = min_all;
        }
        else if (min2_all == mid_card - 1 && mid_card == max2_all - 1 && max2_all == max_all - 1){
            four_of_a_kind = true;
            four_of_a_kind_number = min2_all;
        }

        bool straight_flush;
        char straight_flush_suit;
        int straight_flush_start;

        if (min_all == min2_all - 1 && min2_all == mid_card - 1 && mid_card == max2_all - 1 && max2_all == max_all - 1 && min_suit == min2_suit && min2_suit == mid_suit && mid_suit == max2_suit && max2_suit == max_suit){
            straight_flush = true;
            straight_flush_start = min_all;
            straight_flush_suit = min_suit;
        }
        else {
            straight_flush = false;
        }

        bool royal_flush = false;
        char royal_flush_suit;

        if (min_all == 1 && min2_all == 10 && mid_card == 11 && max2_all == 12 && max_all == 13 && min_suit == min2_suit && min2_suit == mid_suit && mid_suit == max2_suit && max2_suit == max_suit){
            royal_flush = true;
            royal_flush_suit = min_suit;
        }
        else{
            royal_flush = false;
        }


        if (royal_flush = true){
            hand_ranking = 9;

        }
        else if (straight_flush == true){
            hand_ranking = 8;
        }
        else if (four_of_a_kind == true){
            hand_ranking = 7;
        }
        else if (full_house == true){
            hand_ranking = 6;
        }
        else if (flush == true){
            hand_ranking = 5;
        }
        else if (straight == true){
            hand_ranking = 4;
        }
        else if (three_of_a_kind == true){
            hand_ranking = 3;
        }
        else if (two_pair_bool == true){
            hand_ranking = 2;
        }
        else if (one_pair == true){
            hand_ranking = 1;
        }
        else{}

【问题讨论】:

  • 当您使用调试器时,哪些行导致了问题?
  • 调试器没有发现任何错误,但是当我将 cout 语句放入其中一个手动确定循环(即 - “char royal_flush_suit”下的 if 语句)时,它没有打印,但是它仍然在说我每次都有皇家同花顺。
  • 所以你用调试器跳过了cout 行并且它没有打印任何东西?
  • 不,当我尝试调试它时,我将 cout 语句放入 if 语句中。它没有打印 cout,这意味着它没有经过那个 if 语句,但它仍然说变量 (royal_flush) 是真的。虽然,这不可能是正确的,因为实现它的唯一方法是输入 if 语句

标签: c++


【解决方案1】:

看起来您是在分配而不是比较:

    if (royal_flush = true){
        hand_ranking = 9;

    }

该行将royal_flush 设置为true 并始终评估为真,因此它将始终将hand_ranking 设置为9。

我假设您希望在 if 语句中使用 royal_flush == true,它比较两个值。 if(true == royal_flush) 是编写此代码的好方法,以便编译器可以捕获这些类型的错误。 if(royal_flush) 也可以。

【讨论】:

  • 天哪,我不知道我怎么那么笨。当我在所有这些 if 语句上加上双等号时,我忘记了 royal_flush。谢谢你帮我抓住了!!
  • @RichRichards,启用并注意编译器警告。
  • 不傻 - 每个人都会犯这些错误。我已经切换到true == royal_flush 语法,以免我被这样卡住。
  • everybody makes these mistakes 但是编译器应该对此发出警告。不浪费时间跟踪此类错误的一个关键是学习如何阅读编译器警告。
  • The compiler should have warned about that 取决于编译器。其中一些默认情况下不会对此发出警告(请参阅this question about Xcode 3.1)。但是,是的,我同意@n0rd 我们都应该启用并阅读编译器警告。
猜你喜欢
  • 2015-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多