我在CS课程中,我正在尝试创建一个tic tac toe程序。这是我第一次使用函数,我需要帮助检查一个二维数组,以查看它是否已满'x'或'o'。我初始化为从'_'的所有元素开始,我想要一个返回值为true或false,所以我使用#include <stdbool.h>
。这是功能:
bool check_table_full(char board[SIZE][SIZE]){
if(board[0][0] == '_'){
return false;
}else if(board[1][0] == '_'){
return false;
}else if(board[2][0] == '_'){
return false;
}else if(board[0][1] == '_'){
return false;
}else if(board[1][1] == '_'){
return false;
}else if(board[2][1] == '_'){
return false;
}else if(board[0][2] == '_'){
return false;
}else if(board[1][2] == '_'){
return false;
}else if(board[2][2] == '_'){
return false;
}else{
return true;
}
我知道有一个更好的优化,然后使用if else语句,但这只是我脑子里的简单。我使用printf("%s", check_table_full?"true":"false");
来检查它是否应该返回false,因为数组中的所有元素都是'_'。无论我做什么,它都会打印出来,如果我在printf语句中更改了“true”,它会打印第一个引号内的任何内容。
其他所有工作都像SIZE一样定义,数组被定义,我只是不能让这个函数返回false。
对不起,如果这很长,这是我第一次在这里问一个问题。
答案 0 :(得分:3)
如果您执行printf("%s", check_table_full?"true":"false");
,则不调用该函数。
check_table_full
是该函数的地址。你想要check_table_full()
答案 1 :(得分:0)
您可能希望使用嵌套的for循环。我学习了C ++语法而不是C语法,所以语法可能有些偏差。 示例代码...
#include <stdio.h>
int main() {
char board[2][2];
int outer_count, inner_count;
//It will use nested for loops
for (outer_count = 0; outer_count <= 2; count++) {
for (inner_count = 0; inner_count <= 2; count ++) {
if (board[outer_count][inner_count] == '_'){
return false;
}
}
}
return True
}
答案 2 :(得分:-1)
您遍历矩阵的方法不可扩展,您可以轻松引入错误并且不必要复杂。我的检查方法&#39;是任何矩阵大小的2行代码。
这是你滚动的方式 - &gt;
#include <stdio.h>
#include <stdbool.h>
#define MXSIZE 3
bool is_full(char *block) {
for (int l=0;l<MXSIZE*MXSIZE;l++)if(*(block+l)=='_')return false;
return true;
}
int main() {
char my2DArray[MXSIZE][MXSIZE]={{'O','O','O'},{'O','O','O'},{'O','O','_'}};
printf("%s",is_full(&my2DArray[0][0])?"The array is full\n":"The array is not full\n");
return 0;
}
(LOL ..用于投票。)
/ A