По умолчанию char
является типом со знаком.В типичных системах, где char
является 8-битным, это означает, что оно не может содержать значение 178
.Когда вы пытаетесь сделать это сравнение, matrix[x][y]
повышается до int
и будет отрицательным.
Наиболее разумным вариантом будет изменение типа matrix
на unsigned char
(или аналогичный, напримерuint8_t
).Это позволит вам правильно сравнивать другие значения матрицы друг с другом.Но это предполагает, что вы всегда имеете дело с положительными значениями.
Если матрица должна также хранить негативы, то, боюсь, ваш тип данных слишком мал и не может содержать значение 178
.
В противном случае самый простой вариант - привести тип к unsigned перед сравнением:
if (static_cast<unsigned char>(matrix[x][y]) != 178)