gpt4 book ai didi

c - 死循环,取不到值

转载 作者:太空宇宙 更新时间:2023-11-04 03:35:46 26 4
gpt4 key购买 nike

我已经花了 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com