Tic Tac Toe C程序未正确执行
我为两个播放器编写了两个函数。和一个检查获胜条件的功能。程序执行正确,除非它没有检测到有人赢了。所以check函数肯定有问题Tic Tac Toe C程序未正确执行,c,C,我为两个播放器编写了两个函数。和一个检查获胜条件的功能。程序执行正确,除非它没有检测到有人赢了。所以check函数肯定有问题 #include<stdio.h> int P1(int, char []), P2(int, char []), check( int, char []); int main() { char a[10]= "---------" ; int flag= 3, p, q; while( flag== 3) {
#include<stdio.h>
int P1(int, char []), P2(int, char []), check( int, char []);
int main()
{
char a[10]= "---------" ;
int flag= 3, p, q;
while( flag== 3)
{
P1( p, a);
check( flag, a);
if( flag== 1)
{ printf("P1 WINS");}
else
{
P2( q, a);
check( flag, a);
if( flag== 2)
{printf("P2 WINS");}
}
}
return 0;}
int P1(int p, char a[10])
{
printf("P1: Which position?\n");
scanf("%d", &p);
a[p-1]= 'X';
printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0;
}
int P2(int q, char a[10])
{
printf("P2: Which position?\n");
scanf("%d", &q);
a[q-1]= '0';
printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0;
}
int check( int flag, char a[10])//isme galti hai
{
if( a[0]==a[1]==a[2]=='X' ||
a[3]==a[4]==a[5]=='X' ||
a[6]==a[7]==a[8]=='X' ||
a[0]==a[3]==a[6]=='X' ||
a[1]==a[4]==a[7]=='X' ||
a[2]==a[5]==a[8]=='X' ||
a[0]==a[4]==a[8]=='X' ||
a[2]==a[4]==a[6]=='X' )
{
flag= 1;
}
else
{
if( a[0]==a[1]==a[2]=='0' ||
a[3]==a[4]==a[5]=='0' ||
a[6]==a[7]==a[8]=='0' ||
a[0]==a[3]==a[6]=='0' ||
a[1]==a[4]==a[7]=='0' ||
a[2]==a[5]==a[8]=='0' ||
a[0]==a[4]==a[8]=='0' ||
a[2]==a[4]==a[6]=='0' )
{
flag= 2;
}
}
}
#包括
int P1(int,char[])、P2(int,char[])、check(int,char[]);
int main()
{
字符a[10]=“-----------”;
int标志=3,p,q;
while(标志==3)
{
P1(p,a);
检查(标志,a);
如果(标志==1)
{printf(“P1赢”);}
其他的
{
P2(q,a);
检查(标志,a);
如果(标志==2)
{printf(“P2赢”);}
}
}
返回0;}
int P1(int p,字符a[10])
{
printf(“P1:哪个位置?\n”);
scanf(“%d”和“p”);
a[p-1]=“X”;
printf(“%c%c%c\n%c%c%c\n%c%c%c\n”,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);返回0;
}
int P2(int q,字符a[10])
{
printf(“P2:哪个位置?\n”);
scanf(“%d”和“&q”);
a[q-1]=“0”;
printf(“%c%c%c\n%c%c%c\n%c%c%c\n”,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);返回0;
}
整数检查(整数标志,字符a[10])//isme galti hai
{
如果(a[0]==a[1]==a[2]==X'||
a[3]==a[4]==a[5]=='X'||
a[6]==a[7]==a[8]='X'||
a[0]==a[3]==a[6]=='X'||
a[1]==a[4]==a[7]=='X'||
a[2]==a[5]==a[8]='X'||
a[0]==a[4]==a[8]=='X'||
a[2]==a[4]==a[6]==X')
{
flag=1;
}
其他的
{
如果(a[0]==a[1]==a[2]==0'||
a[3]==a[4]==a[5]==0'||
a[6]==a[7]==a[8]='0'||
a[0]==a[3]==a[6]==0'||
a[1]==a[4]==a[7]='0'||
a[2]==a[5]==a[8]='0'||
a[0]==a[4]==a[8]==0'||
a[2]==a[4]==a[6]==0')
{
flag=2;
}
}
}
返回所指出的flag值后,它仍然不起作用
#include<stdio.h>
int P1(int, char []), P2(int, char []), check( int, char []);
int main()
{
char a[10]= "---------" ;
int flag= 3, p, q;
while( flag== 3)
{
P1( p, a);
flag= check( flag, a);
if( flag== 1)
{ printf("P1 WINS");}
else
{
P2( q, a);
flag= check( flag, a);
if( flag== 2)
{printf("P2 WINS");}
}
}
return 0;}
int P1(int p, char a[10])
{
printf("P1: Which position?\n");
scanf("%d", &p);
a[p-1]= 'X';
printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0;
}
int P2(int q, char a[10])
{
printf("P2: Which position?\n");
scanf("%d", &q);
a[q-1]= '0';
printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0;
}
int check( int flag, char a[10])//isme galti hai
{
if( a[0]==a[1]==a[2]=='X' ||
a[3]==a[4]==a[5]=='X' ||
a[6]==a[7]==a[8]=='X' ||
a[0]==a[3]==a[6]=='X' ||
a[1]==a[4]==a[7]=='X' ||
a[2]==a[5]==a[8]=='X' ||
a[0]==a[4]==a[8]=='X' ||
a[2]==a[4]==a[6]=='X' )
{
flag= 1;
}
else
{
if( a[0]==a[1]==a[2]=='0' ||
a[3]==a[4]==a[5]=='0' ||
a[6]==a[7]==a[8]=='0' ||
a[0]==a[3]==a[6]=='0' ||
a[1]==a[4]==a[7]=='0' ||
a[2]==a[5]==a[8]=='0' ||
a[0]==a[4]==a[8]=='0' ||
a[2]==a[4]==a[6]=='0' )
{
flag= 2;
}
}
return flag;
}
#包括
int P1(int,char[])、P2(int,char[])、check(int,char[]);
int main()
{
字符a[10]=“-----------”;
int标志=3,p,q;
while(标志==3)
{
P1(p,a);
标志=检查(标志,a);
如果(标志==1)
{printf(“P1赢”);}
其他的
{
P2(q,a);
标志=检查(标志,a);
如果(标志==2)
{printf(“P2赢”);}
}
}
返回0;}
int P1(int p,字符a[10])
{
printf(“P1:哪个位置?\n”);
scanf(“%d”和“p”);
a[p-1]=“X”;
printf(“%c%c%c\n%c%c%c\n%c%c%c\n”,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);返回0;
}
int P2(int q,字符a[10])
{
printf(“P2:哪个位置?\n”);
scanf(“%d”和“&q”);
a[q-1]=“0”;
printf(“%c%c%c\n%c%c%c\n%c%c%c\n”,a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8]);返回0;
}
整数检查(整数标志,字符a[10])//isme galti hai
{
如果(a[0]==a[1]==a[2]==X'||
a[3]==a[4]==a[5]=='X'||
a[6]==a[7]==a[8]='X'||
a[0]==a[3]==a[6]=='X'||
a[1]==a[4]==a[7]=='X'||
a[2]==a[5]==a[8]='X'||
a[0]==a[4]==a[8]=='X'||
a[2]==a[4]==a[6]==X')
{
flag=1;
}
其他的
{
如果(a[0]==a[1]==a[2]==0'||
a[3]==a[4]==a[5]==0'||
a[6]==a[7]==a[8]='0'||
a[0]==a[3]==a[6]==0'||
a[1]==a[4]==a[7]='0'||
a[2]==a[5]==a[8]='0'||
a[0]==a[4]==a[8]==0'||
a[2]==a[4]==a[6]==0')
{
flag=2;
}
}
返回标志;
}
If尝试用数字替换字符,而不是0和X使用8和9,但执行不正确。检查函数中的条件语句也有一些问题。很抱歉。我对你的代码做了一些修改并进行了测试,工作正常
#include<stdio.h>
int P1(int, char []), P2(int, char []), check( int, char []);
int main()
{
char a[10]= "---------" ;
int flag= 3, p, q;
while( flag== 3)
{
P1( p, a);
flag= check( flag, a);
if( flag== 1)
{ printf("P1 WINS");}
else
{
P2( q, a);
flag= check( flag, a);
if( flag== 2)
{printf("P2 WINS");}
}
}
return 0;}
int P1(int p, char a[10])
{
printf("P1: Which position?\n");
scanf("%d", &p);
a[p-1]= 'X';
printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0;
}
int P2(int q, char a[10])
{
printf("P2: Which position?\n");
scanf("%d", &q);
a[q-1]= '0';
printf("%c %c %c\n%c %c %c\n%c %c %c\n", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8]);return 0;
}
int check( int flag, char a[10])//isme galti hai
{
if(
(a[0]== 'X' && a[1]== 'X' && a[2]=='X') ||
(a[3]== 'X' && a[4]== 'X' && a[5]=='X') ||
(a[6]== 'X' && a[7]== 'X' && a[8]=='X') ||
(a[0]== 'X' && a[3]== 'X' && a[6]=='X') ||
(a[1]== 'X' && a[4]== 'X' && a[7]=='X') ||
(a[2]== 'X' && a[5]== 'X' && a[8]=='X') ||
(a[0]== 'X' && a[4]== 'X' && a[8]=='X') ||
(a[2]== 'X' && a[4]== 'X' && a[6]=='X'))
{
flag= 1;
}
else
{
if(
(a[0]== '0' && a[1]== '0' && a[2]=='0') ||
(a[3]== '0' && a[4]== '0' && a[5]=='0') ||
(a[6]== '0' && a[7]== '0' && a[8]=='0') ||
(a[0]== '0' && a[3]== '0' && a[6]=='0') ||
(a[1]== '0' && a[4]== '0' && a[7]=='0') ||
(a[2]== '0' && a[5]== '0' && a[8]=='0') ||
(a[0]== '0' && a[4]== '0' && a[8]=='0') ||
(a[2]== '0' && a[4]== '0' && a[6]=='0'))
{
flag= 2;
}
}
return flag;
}
请这样想-条件的评估结果为真(1)或假(0)…在您的头脑中向后执行:
if (a == b == 0)
现在,如果我们给a和b赋值为0:
int a = 0, b = 0;
将对条件进行评估,从而:
b == 0
首先,b==0部分,这是真的,我们知道b==0,因为我们给它赋了那个值…但是现在,在第一个条件被解析后,表达式是什么
if (a == 1)
因为b==0的计算结果为真(1),所以您看到了吗
您可以通过以下方式完成作业:
int a = b = 0;
但不是条件表达式,因为它们是如何解析的
希望这有帮助。请说明问题的确切内容。说check函数有问题不是问题。另外,请添加到目前为止您为修复函数所做的操作。这可能是一个家庭作业问题。您希望使用调试器跟踪代码以了解实际情况。我不知道如何执行此操作。欢迎使用堆栈溢出。请注意,在这里说“谢谢”的首选方式是投票选出好的问题和有用的答案(一旦你有足够的声誉这么做),并接受对你提出的任何问题最有用的答案(这也会给你的声誉带来一点提升)。请查看页面,我也编辑了代码并返回了标志。新的代码和原来的代码一起在我的问题中。酷-它解决了问题吗?不。它以相同的方式执行。现在可以工作了,希望这有帮助-你不应该太难弄清楚我所做的更改发生了什么。是的,它工作了!但是,早期编写条件的方法有什么问题?
int a = b = 0;