我为两位球员写了两个功能。并且有一个功能可以检查获胜条件。程序正确执行,但它没有检测到有人获胜。所以检查功能一定有问题。
#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;
}
}
}
在指出后返回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;
}
如果尝试用数字替换字符而不是0而X使用8和9但是没有正确执行。
答案 0 :(得分:2)
检查功能中的条件语句也存在一些问题。对于那个很抱歉。我对你的代码做了一些修改并测试了它,工作正常。
#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;
}
ETA:看看这段代码,在你尝试编译并运行它之前,你期望结果是什么?
int main(void)
{
int a = 0;
int b = 0;
if (a == b == 0)
fprintf(stdout, "Both are zero.\n");
else
fprintf(stdout, "both are not zero.\n");
exit(EXIT_FAILURE);
}
可以这样想 - 条件被评估为真(1)或假(0)......在你脑中倒退:
if (a == b == 0)
现在,如果我们为a和b分配值0:
int a = 0, b = 0;
因此将评估条件:
b == 0
首先,b == 0部分,这是真的,我们知道b == 0,因为我们为它赋予了该值... byut现在解决第一个条件后的表达式是什么?
if (a == 1)
因为b == 0的计算结果为真(1),你看?
您可以这种方式进行作业:
int a = b = 0;
但不是条件表达式,因为它们是如何解决的。
希望这有帮助。