Если оператор с массивом символов не работает должным образом - PullRequest
0 голосов
/ 08 июня 2018

Итак, я создал функцию void, которая должна давать значение 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 голосов
/ 08 июня 2018

По умолчанию char является типом со знаком.В типичных системах, где char является 8-битным, это означает, что оно не может содержать значение 178.Когда вы пытаетесь сделать это сравнение, matrix[x][y] повышается до int и будет отрицательным.

Наиболее разумным вариантом будет изменение типа matrix на unsigned char (или аналогичный, напримерuint8_t).Это позволит вам правильно сравнивать другие значения матрицы друг с другом.Но это предполагает, что вы всегда имеете дело с положительными значениями.

Если матрица должна также хранить негативы, то, боюсь, ваш тип данных слишком мал и не может содержать значение 178.

В противном случае самый простой вариант - привести тип к unsigned перед сравнением:

if (static_cast<unsigned char>(matrix[x][y]) != 178)
...