c - 我不小心用条件句(如果)更改了变量?

标签 c function matrix functional-programming

关于下面代码的信息:函数初始化播放器代码是:

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/

相关文章:

arrays - 如何在matlab中给定一组链接和边找到邻接矩阵

python - 为什么 numpy 说这个矩阵*有时*是奇异的?

c - 使用 SQLite FTS4 的自动 OR 查询

c - 有效地计算两个数之和的模数

emacs - (defalias 'A (symbol-function ' B)) 和 (defalias 'A ' B) 之间的区别

c++ - 编译器不会为 "const"和 "not-const"函数给出不明确的错误

c - 在 Windows 中获取文件大小并设置搜索指针

java - Java 和 C 是否以相同的方式表示 UTF char 字节?

javascript - 如何使用javascript在一段时间后将CSS显示从可见更改为不可见

java - java中如何将矩阵转换为图像