数组循环不能正常工作? C ++

时间:2010-04-01 21:06:30

标签: c++ arrays boolean

尝试计算数组中有多少元素不等于0,设置错误了吗?

我想检查数组中的所有值(它是一个数独板),然后当所有元素都“满”时,我需要返回true。 有什么事吗?

bool boardFull(const Square board[BOARD_SIZE][BOARD_SIZE])
{
    int totalCount=0;
    for (int index1 = 0; index1 < BOARD_SIZE; index1++)
        for (int index2 = 0; index2 < BOARD_SIZE; index2++){ 
             if(board[index1][index2].number!=0)
                totalCount++;
        }
    if(totalCount=81)
        return true;
    else 
        return false;

4 个答案:

答案 0 :(得分:12)

你有=而不是==

if (totalCount == 81)

是正确的行。

使用单个“=”执行此操作实际上会将值81分配给totalCount,因此您的测试非常重要:

if (81)

因为在C ++中,任何非零都是真的,这总是正确的

答案 1 :(得分:1)

您的=应该是==。这就是我要说的全部内容。

另外,为什么BOARD_SIZE有一个常量,然后在最后检查81?不会检查BOARD_SIZE * BOARD_SIZE会更好吗?

答案 2 :(得分:0)

此帖子或您的代码中的If(totalCount = 81)是错字吗?看起来你已经在那里分配了价值。

答案 3 :(得分:0)

您可以在找到第一个0后立即离开该功能,并且可以通过一个循环解决此问题:

bool boardFull(const Square board[BOARD_SIZE][BOARD_SIZE])
{
    const Square* p = board[0];
    for (int n = BOARD_SIZE * BOARD_SIZE; n; --n, ++p)
    {
        if (p->number == 0) return false;
    }
    return true;
}

但我更喜欢算法来手写循环:

struct Square
{
    int number;

    bool is_zero() const
    {
        return number == 0;
    }
};

#include <algorithm>
#include <functional>

bool boardFull(const Square board[BOARD_SIZE][BOARD_SIZE])
{
    return std::find_if(
        board[0],
        board[BOARD_SIZE],
        std::mem_fun_ref(&Square::is_zero)
    )== board[BOARD_SIZE];
}