Онлайн компилятор C

#include <stdio.h> int is_white(char column, char row){ int a[9]={0}; while(column=='A'||column=='C'||column=='E'||column=='G'){ a[2]=1; a[4]=1; a[6]=1; a[8]=1; }while(column=='B'||column=='D'||column=='F'||column=='H'){ a[1]=1; a[3]=1; a[5]=1; a[7]=1; } return a[row]; } int main() { char c,m; int answer; scanf("%c%c",&c,&m); answer=is_white(c,m); printf("%d",answer); return 0; }
这段代码试图判断国际象棋棋盘上一个格子是否为白色,但存在逻辑错误。函数 `is_white` 接收列(字母A-H)和行(数字1-8),但代码中 `row` 是字符类型,而数组索引需要整数。同时,`while` 循环会变成死循环,因为循环条件中的变量 `column` 在循环体内没有改变。

- 注意 `row` 是字符类型,比如 '1' 到 '8',但数组索引需要整数 1 到 8。你需要将字符转换为对应的数字,例如 `row - '0'` 或 `row - 48`。
- `while` 循环的条件判断只检查一次 `column` 的值,但循环体内没有改变 `column`,所以如果条件成立,循环会无限执行。这里应该用 `if` 语句而不是 `while`。