如果char数组的语句不能正常工作

时间:2018-06-07 22:03:17

标签: c++ arrays loops multidimensional-array minesweeper

所以我创建了一个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 {}
}

1 个答案:

答案 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)