c - 死循环,取不到值

标签 c loops infinite-loop

我已经花了 3 个小时试图让这段代码工作,但是每当我尝试时我都会陷入循环并且控制台不断循环。我已经尝试了所有方法 - 我创建了一个只返回 i 并重新分配值的函数,但它似乎不起作用。

出于某种原因,每当我尝试使用逻辑运算符时,它都不想对我起作用。 mes->hand[x] 的值类似于 "2D,4D,3C,5C,6H,7H"等等,而花色是 "H", "C", "D", "S"in引用卡片。

int newtrick_value(struct Message *mes, int suit) {
    int len = strlen(mes->hand);
    int x = 0, i = 50, y = 0;
    while (i < 63) {
        while(x < len) {
            if (((mes->hand[x] == i || mes->hand[x] == y) && mes->hand[x+1] == suit)){
                if(i>= 58){
                    return y;
                }   
                return i;
            }
            x++;
            continue;
        }
        if(i >= 57) {
            y = determine_letter(i);        
        }
        i ++;
        x = 0;
        continue;
    }
    return 0;
}

最佳答案

我有以下观察:

  1. 你的 continue陈述是多余的。您已经处于循环的底部。 (虽然没有伤害。)

  2. 您的号码 50 etc 都是指 ASCII 字符。添加对此的评论。

  3. 我能找到的唯一错误是:

    if(i >= 57) {
        y = determine_letter(i);        
    }
    

这应该是 if (i>=58)因为 57 ASCII 是 9 .可能 determine_letter收到 57 时会感到困惑(该函数显然将高于 9 的卡片映射到您的卡片编码方案中,您没有完全提供)。因此,该函数可以在 return y; 中返回无效值。 ,调用函数无法理解并导致您的控制台循环。

另外这条语句应该放在while (x < len)之前, 所以你首先映射字符然后比较它并在循环结束时递增 i为下一个字符(卡值)进行比较。

应用这些观察得出:

int newtrick_value(struct Message *mes, int suit) {
    int len = strlen(mes->hand);
    int x = 0, i = 50, y = 0;
    while (i < 63) {
        if (i >= 58) {
            y = determine_letter(i);        
        }
        while (x < len) {
            if (((mes->hand[x] == i || mes->hand[x] == y) && mes->hand[x+1] == suit)){
                if (i >= 58) {
                    return y;
                }   
                return i;
            }
            x++;
        }
        i++;
        x = 0;
    }
    return 0;
}

如果没有调用者、子函数和卡片编码方案的所有细节,我无法提供更多建议。我希望这会有所帮助。

注意:考虑功能,该函数只返回给定花色的第一张牌的值。这意味着比较纸牌值的外循环似乎毫无用处:首先找到第一套花色,然后获取它的值更有效:

int newtrick_value(struct Message *mes, int suit) {
    int len = strlen(mes->hand);
    int x = 0;

    while (x < len) {
        if (mes->hand[x] == suit)){
            return(mes->hand[x-1]);
        }
        x++;
    }
    return 0;
}

关于c - 死循环,取不到值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32902951/

相关文章:

宏可以用来模拟 C++ 模板函数吗?

c - 使用其内核命名空间 PID 从全局范围内终止进程

python - 使用大数据集 Python 优化循环

java - Java中奇怪的 "for(;;)"死循环,这个有什么用?

c - msgget() 和 ftok() 出错

c++ - 转换 C++ 对象 <--> C 结构的最佳方法?

php - 是否有 PHP 可以循环的最大迭代次数?

java - 嵌套循环将多维数组转换为 Hashmap

Java深度优先搜索无限循环

java - 显示SVG时无限循环,发现问题,无法解决