2301_79301599 2023-10-28 16:30 采纳率: 50%
浏览 7
已结题

if判断感觉没有错,但输出一直朝一个方向输出

感觉判断没有错,但每次执行就不行,要么一直输出不是对子,要么一直出牌,到底是哪里出了错??

void unlimit(int n,List<string> &whichPai,List<string> &stack)
{
    string str="";
    string storePai[16]={};
    int m=n;
    int i=0,j=0;
    cout<<"要出的牌:"<<endl;
    //存牌
    while(m>0)
    {
        cin>>str;
        storePai[i++]=str;
        m--;
    }
    //出多张牌
        switch(n)
        {
        case 2:
            if(storePai[0][3]==storePai[1][3])
            {
                while(storePai[j]!="")
                {
                    whichPai.remove(whichPai.find(storePai[j]));
                    stack.insertAsLast(storePai[j]);
                    j++;
                }
            }
            else
                cout<<"不是对子!"<<endl;
            break;
        case 4:
            if(storePai[0][3]==storePai[1][3]==storePai[2][3]==storePai[3][3])
            {
                while(storePai[j]!="")
                {
                    whichPai.remove(whichPai.find(storePai[j]));
                    stack.insertAsLast(storePai[j]);
                    j++;
                }
            }
            else
                cout<<"不是炸弹!"<<endl;
            break;
        }
    }


img

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-10-28 19:01
    关注

    【以下回答由 GPT 生成】

    问题是由于在每次运行时,尽管输入的牌可能不同,但是数组storePai没有被重置,导致之前输入的牌仍然存储在数组中,从而影响了判断条件的结果。

    为了解决这个问题,我们需要在每次运行函数unlimit时,将数组storePai重置为空数组。以下是修改后的代码:

    void unlimit(int n, List<string>& whichPai, List<string>& stack) {
        string str = "";
        string storePai[16] = {};   // 重置storePai为空数组
        int m = n;
        int i = 0, j = 0;
        cout<<"要出的牌:"<<endl;
    
        // 存牌
        while(m > 0) {
            cin >> str;
            storePai[i++] = str;
            m--;
        }
    
        // 出多张牌
        switch(n) {
            case 2:
                if(storePai[0][3] == storePai[1][3]) {
                    while(storePai[j] != "") {
                        whichPai.remove(whichPai.find(storePai[j]));
                        stack.insertAsLast(storePai[j]);
                        j++;
                    }
                } else {
                    cout<<"不是对子!"<<endl;
                }
                break;
            case 4:
                if(storePai[0][3] == storePai[1][3] && storePai[1][3] == storePai[2][3] && storePai[2][3] == storePai[3][3]) {
                    while(storePai[j] != "") {
                        whichPai.remove(whichPai.find(storePai[j]));
                        stack.insertAsLast(storePai[j]);
                        j++;
                    }
                } else {
                    cout<<"不是炸弹!"<<endl;
                }
                break;
        }
    }
    

    通过重置数组storePai为空数组,确保每次调用unlimit函数时都是使用一个空的数组进行存储牌,并且不会受到之前输入牌的影响。这样就可以得到正确的判断结果。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月6日
  • 创建了问题 10月28日

悬赏问题

  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)/p的连乘积值
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术