Если оператор с массивом символов не работает должным образом

Поэтому я создал функцию 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 {}
}

0

Решение

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

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

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

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

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]