c - 我无法修改函数中的变量,因此当它返回主函数时,while 的条件永远不会满足
问题描述
基本上我希望变量'End'来控制while循环。在 while 循环中,有一个函数被调用来检查多个事物(游戏是否井字游戏),当函数看到 tris 或表已满(平局)时,如果有人获胜,它应该将变量 'End' 更改为 -1 或 - 2如果是平局,那么游戏应该结束。(这不会发生)
printf("TURN %u\n", COUNT); //conta turno (inglese)
printf("Player %d:\n", Start_Num); //giocata player1
printf("ROW: ");
scanf("%u", &ROW);
if (ROW > 2){
puts("ENTER A VALID VALUE (BETWEEN 0 AND 2)"); //decisione mossa
scanf("%u", &ROW);
}
printf("COLUMN: ");
scanf("%u", &COLUMN);
if (COLUMN > 2){
puts("ENTER A VALID VALUE (BETWEEN 0 AND 2)");
scanf("%u", &COLUMN);
}
if (Start_Num == 1){ //assegnazione mossa all'array
TABLE[ROW][COLUMN] = P1_SIGN;
}
else {
TABLE[ROW][COLUMN] = P2_SIGN;
}
Print_Table_Full(TABLE); //funzioni
Verify_Win_Or_Tie(TABLE, P1_SIGN, P2_SIGN, End, Counter_Obj);
COUNT++;
}
while 循环不完整,但无论如何它应该可以工作
if(TABLE[0][0] && TABLE[0][1] && TABLE[0][2] == P1_SIGN){ //prima riga
puts("PLAYER 1 WINS\n");
End = -1; //valore di vincita
}
if(TABLE[0][0] && TABLE[0][1] && TABLE[0][2] == P2_SIGN){
puts("PLAYER 2 WINS\n");
End = -1;
}
if(TABLE[1][0] && TABLE[1][1] && TABLE[1][2] == P1_SIGN){ //seconda riga
puts("PLAYER 1 WINS\n");
End = -1;
}
if(TABLE[1][0] && TABLE[1][1] && TABLE[1][2] == P2_SIGN){
puts("PLAYER 2 WINS\n");
End = -1;
}
if(TABLE[2][0] && TABLE[2][1] && TABLE[2][2] == P1_SIGN){ //terza riga
puts("PLAYER 1 WINS\n");
End = -1;
}
if(TABLE[2][0] && TABLE[2][1] && TABLE[2][2] == P2_SIGN){
puts("PLAYER 2 WINS\n");
End = -1;
}
if(TABLE[0][0] && TABLE[1][0] && TABLE[2][0] == P1_SIGN){ //prima colonna
puts("PLAYER 1 WINS\n");
End = -1;
}
if(TABLE[0][0] && TABLE[1][0] && TABLE[2][0] == P2_SIGN){
puts("PLAYER 2 WINS\n");
End = -1;
}
if(TABLE[0][1] && TABLE[1][1] && TABLE[2][1] == P1_SIGN){ //seconda colonna
puts("PLAYER 1 WINS\n");
End = -1;
}
if(TABLE[0][1] && TABLE[1][1] && TABLE[2][1] == P2_SIGN){
puts("PLAYER 2 WINS\n");
End = -1;
}
if(TABLE[0][2] && TABLE[1][2] && TABLE[2][2] == P1_SIGN){ //terza colonna
puts("PLAYER 1 WINS\n");
End = -1;
}
if(TABLE[0][2] && TABLE[1][2] && TABLE[2][2] == P2_SIGN){
puts("PLAYER 2 WINS\n");
End = -1;
}
if(TABLE[0][0] && TABLE[1][1] && TABLE[2][2] == P1_SIGN){ //diagonale 1
puts("PLAYER 1 WINS\n");
End = -1;
}
if(TABLE[0][0] && TABLE[1][1] && TABLE[2][2] == P2_SIGN){
puts("PLAYER 2 WINS\n");
End = -1;
}
if(TABLE[0][2] && TABLE[1][1] && TABLE[2][0] == P1_SIGN){ //diagonale 2
puts("PLAYER 1 WINS\n");
End = -1;
}
if(TABLE[0][2] && TABLE[1][1] && TABLE[2][0] == P2_SIGN){
puts("PLAYER 2 WINS\n");
End = -1;
}
for(size_t i = 0; i < 3; i++){
for(size_t j = 0; j < 3; j++){
if(TABLE[i][j] == 'X' || TABLE[i][j] == 'O'){
Counter_Obj++;
}
}
}
if (Counter_Obj == 9){
puts("DRAW!");
End = -2;
}
return End;
}
我什至尝试使用指针。变量 End 是
int End = 0;
解决方案
在您的代码中,您应该将 if 条件更改为:
if(TABLE[0][0] && TABLE[0][1] && TABLE[0][2] == P1_SIGN)
因为
if((TABLE[0][0] == P1_SIGN) && (TABLE[0][1] == P1_SIGN) && (TABLE[0][2] == P1_SIGN))
被if(TABLE[0][0] && TABLE[0][1] && TABLE[0][2] == P1_SIGN)
评估为
(TABLE[0][0] != 0) && (TABLE[0][1] != 0) && (TABLE[0][2] == P1_SIGN)
推荐阅读
- javascript - 组件无法监听 react-router
- python - Celery '错误:没有节点在时间限制内回复'错误 - 如何调试?
- java - hibernate.cfg.xml 仅在使用已弃用的 buildSessionFactory() 时才被读取,而不是与 StandardServiceRegistryBuilder 一起使用
- javascript - 带有 Firebase 实时数据库和 VueFire 的 Vue.js 应用程序突然停止工作
- python - 断点和单步执行 Pandas/Python 中的代码
- php - 如何通过 DOMDocument 获取父元素和嵌套元素?
- serialization - 我可以在 Scio 中设置/取消设置默认编码器吗?
- python - 'NoneType' 对象在项目中没有属性“用户名”,该项目已经运行了一段时间
- core-data - CloudKit - 如何共享一组实体并允许创建新数据
- anaconda - 如何解决 Anaconda 和 Conda 更新 NoBaseEnvironmentError?