这是主要功能,其中还有9个函数被调用。我会告诉你另一个功能,以了解我的目标是什么。
int main() {
char B[rows][columns];
char answer;
int newgame;
printf("Are you ready to play? Answer with y (or Y) for yes or n (or N) for no\n");
scanf("\n%c",&answer);
while(answer!='N' && answer!='n'){
fillArray(B);
printArray(B);
answer='y';
while(answer!='N' && answer!='n'){
vasilhs(B);
printArray(B);
check_draw(B);//I will place an if statement after the check_draw function
check_vertical_win(B);
check_horizontal_win(B);
check_right_diagonal_win(B);
check_left_diagonal_win(B);
antipalos_paikths(B);
printArray(B);
check_draw(B);
check_vertical_win(B);
check_horizontal_win(B);
check_right_diagonal_win(B);
check_left_diagonal_win(B);
}
printf("Do you want to play again?\n");
scanf("\n\n%c",&answer);
}
}//end of main function
//function check_draw
void check_draw(char A[rows][columns]){
int i,j;
int newgame;
//if statement will check in an matrix if the following elements are equal to '-'
if(A[0][0]!='-' && A[0][1]!='-' && A[0][2]!='-' && A[0][3]!='-' && A[0][4]!='-' && A[0][5]!='-' && A[0][6]!='-'){
printf("The result is a draw");
newgame=10;
}
}
因此,当函数check_draw中的if语句为True时,变量newgame得到值10。
if(newgame==10){
break;
}
为什么,当我在check_draw调用之后放置这个if语句时,它是否会破坏while循环?
答案 0 :(得分:0)
从您的代码实现:
void check_draw(char A[rows][columns]){
int i, j;
int newgame;
//if statement will check in an matrix if the following elements are equal to '-'
if (A[0][0] != '-' && A[0][1] != '-' && A[0][2] != '-' && A[0][3] != '-' && A[0][4] != '-' && A[0][5] != '-' && A[0][6] != '-'){
printf("The result is a draw");
newgame = 10;
}
}
int newgame
这是check_draw
函数的本地副本。
如果另一个具有相同名称的变量作为全局变量存在,那么您不应在int newgame
函数中声明check_draw
。它将使本地副本可以使用。
建议:
int newgame;// Write it outside main
void check_draw(char A[rows][columns]){
int i, j;
//if statement will check in an matrix if the following elements are equal to '-'
if (A[0][0] != '-' && A[0][1] != '-' && A[0][2] != '-' && A[0][3] != '-' && A[0][4] != '-' && A[0][5] != '-' && A[0][6] != '-'){
printf("The result is a draw");
newgame = 10;
}
}
如果您在int newgame;
函数内部写check_draw
而不在newgame = 10;
函数内创建任何本地副本,则check_draw
函数中的newgame
语句将更改全局{{1}的值}。
答案 1 :(得分:0)
变量newgame
在函数check_draw
中再次定义 ,因此它是{{> 本地副本 的{{ 1}} check_draw
无法访问。
假设变量main
和rows
在此处未显示的部分代码中正确声明和初始化,一种解决方案是将columns
的值返回到{ {1}}并删除' main'中的声明:
newgame
另一种解决方案是将main
的变量int main() {
char B[rows][columns];
char answer;
int result;
printf("Are you ready to play? Answer with y (or Y) for yes or n (or N) for no\n");
scanf("\n%c",&answer);
while(answer!='N' && answer!='n'){
fillArray(B);
printArray(B);
answer='y';
while(answer!='N' && answer!='n'){
result = check_draw(B);
}
printf("Do you want to play again?\n");
scanf("\n\n%c",&answer);
}
}//end of main function
//function check_draw
int check_draw(char A[rows][columns]){
int i,j;
int newgame = -1;
//if statement will check in an matrix if the following elements are equal to '-'
if(A[0][0]!='-' && A[0][1]!='-' && A[0][2]!='-' && A[0][3]!='-' && A[0][4]!='-' && A[0][5]!='-' && A[0][6]!='-'){
printf("The result is a draw");
newgame=10;
}
return newgame;
}
作为指针传递并删除main
中的声明:
newgame
请阅读Basic Authentication关于本地变量'范围。另请查看this link。