Mit*_*ner 0 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 {}
}
Run Code Online (Sandbox Code Playgroud)
默认情况下,char是签名类型.在典型的char8位比特系统上,这意味着它无法保存该值178.当你尝试进行这种比较时,matrix[x][y]会被提升为int负面.
最明智的选择是将matrix类型更改为unsigned char(或类似的uint8_t).这将允许您正确地比较其他矩阵值.但这假设你总是处理积极的价值观.
如果矩阵也必须存储负数,那么我担心你的数据类型太小并且无法保存该值178.
否则,最简单的选择是在比较之前将类型转换为unsigned:
if (static_cast<unsigned char>(matrix[x][y]) != 178)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |