关于下面代码的信息:函数初始化播放器代码是:
void initialise_players (tvector_players *vj){
int i;
for (i=0; i< (vj->nplayers); i++){
vj->vjug [i].letter = 'A'+i;
vj->vjug [i].num_regiones = 0;
}
}
在前一个函数调用之后,在第二个 for (for (j=0; j < (mapa->num_cols+1); j++)) 我正在给“map->p[i+1] .m[j+1].player_id”。 然后我打印它,现在一切正常。但是后来我使用了一个不应该以任何方式影响最后一个变量的条件句,我再次打印它但是这次变量的值“map->p[i+1].m[j+1].player_id”无缘无故更改为“A”。如果给出的第一个字符是“A”是可以理解的,但大多数时候不是。为什么?
initialise_players (vj);
for (i=0; i < (map->rows+1); i++){
for (j=0; j < (mapa->num_cols+1); j++){
map->p[i+1].m[j+1].player_id = 'A'+rand()%vj->nplayers;
printf ("\n%c\n", map->p[i+1].m[j+1].jugador_id);
if (map->p[i+1].m[j+1].jugador_id = 'A'){
printf ("\n%c\n", map->p[i+1].m[j+1].jugador_id);
vj->vjug[0].num_regiones += 1;
}
}
}
show_matrix (map, vj);
最佳答案
map->p[i+1].m[j+1].jugador_id = 'A'
是 int
类型的表达式 1 等于 'A'
等于。
在所有可能的编码2 上,'A'
是非零的,所以你的 if
block 将始终运行。
解决方案:替换=
与 ==
.
一些民间写'A' == map->p[i+1].m[j+1].jugador_id
如果它们滑动 ==
会导致编译时失败.
1我没有错。 'A'
是一个 int
C 中的文字,和一个 char
C++ 中的字面量。
2C 标准坚持 'A'
不能为 0。
关于c - 我不小心用条件句(如果)更改了变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43896565/