尝试计算数组中有多少元素不等于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;
答案 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];
}