所以我创建了一个void函数,它应该为一个2D数组赋值178。然后我创建了一个if语句来检查这个数组是否不等于178并且如果它不相等那么计数器(int变量stevec)增加1.运行调试器我发现这个条件总是是的,但它不应该,因为数组中的所有值在开头都等于178。我也声明了char matrix [10] [10] = {};在最开始的所有功能之外。
void set_matrix_to_default()
{
for(int y=1; y<=9; y++)
{
for(int x=1; x<=9; x++)
{
matrix[x][y]=178;
}
}
}
void Check_Win()
{
int stevec=0;
for(int y=1; y<=9; y++)
{
for(int x=1; x<=9; x++)
{
if(matrix[x][y]!=178)
{
stevec++;
}
else
{
}
}
}
if(stevec==9*9)
{
cout<<"Konec igre, zmagal si!";
exit(0);
}
else {}
}
答案 0 :(得分:5)
默认情况下,char
是签名类型。在char
为8位的典型系统上,这意味着它不能保存值178
。当您尝试进行此比较时,matrix[x][y]
会提升为int
,并且会为负数。
最明智的选择是将matrix
类型更改为unsigned char
(或类似uint8_t
)。这将允许您正确地比较其他矩阵值。但这假设你总是处理积极的价值观。
如果矩阵也必须存储负片,那么我担心你的数据类型太小而且不能保持值178
。
否则,最简单的选择是在比较之前将类型转换为unsigned:
if (static_cast<unsigned char>(matrix[x][y]) != 178)