我无法从此函数获得正确的回报

I'm having trouble getting the correct return from this function

本文关键字:回报 函数      更新时间:2023-10-16

我正在创建一个井字游戏程序。我有不同的功能来测试不同的可能结果。 当我测试我的对角线可能性时,它工作正常。但是,当我尝试测试行或列时,它总是返回 0。我认为这是因为我的返回语句和中断语句在错误的位置,但我找不到正确的位置。

int testCol (int board[3][3]){//test cols for win
    int b = 0;
    int c = 0;
    for (b = 0; b < 3; b++){
        if (board[0][b] == 1 && board[1][b] == 1 && board[2][b] == 1){//test player 1
             return 1;
             cout << "I work" << endl;
             break;
        }
        else if(board[0][b] == 2 && board[1][b] == 2 && board[2][b] == 2){//test player 2
             return 2;
             break;
        }
        else{//if none are true return no win
             return 0;
        }
    }
}

两件事;您需要将return 0移出循环。否则,您将永远无法测试所有可能性。其次,您的输出语句在 return 之后,因此无法访问。

return 之后不需要 break 语句。函数中的最后返回似乎是函数的错误状态,因此您可以将其排除在循环之外。第一个分支if输出语句应位于返回之前。

int testCol (int board[3][3]){//test cols for win
    int b = 0;
    int c = 0;
    for (b = 0; b < 3; b++){
        if (board[0][b] == 1 && board[1][b] == 1 && board[2][b] == 1){//test player 1
             cout << "I work" << endl;
             return 1;
        }
        else if(board[0][b] == 2 && board[1][b] == 2 && board[2][b] == 2){//test player 2
             return 2;            
        }
    }
    return 0;
}

当你找到一整列时,你会提前返回。如果没有入选者,则在测试所有列后返回 0。

这里是固定版本。

int testCol (int board[3][3]){//test cols for win
    for (int b = 0; b < 3; b++){
        if (board[0][b] == 1 && board[1][b] == 1 && board[2][b] == 1){//test player 1
             return 1;
        }
        else if(board[0][b] == 2 && board[1][b] == 2 && board[2][b] == 2){//test player 2
             return 2;
        }
    }
    return 0;
}