#include<stdio.h>
int main()
{
int num[3][3]={};//定义数组
int ret = 0;//为1时游戏结束
void painting( int num[][3] );//绘制函数
int ifs( int num[][3] );//判定游戏结束
int whichone( int num[][3] );//判定胜方
int a,b;//棋子坐标
int c,d;//实际数组坐标
int i=1;//第i轮
while(ret==0){
painting( num );
if(i%2){
printf("本轮 X 方下,请输入坐标:");
scanf("%d %d",&a,&b);//还应判定在棋盘内且之前没有下过
c=a-1;
d=b-1;
num[c][d]=1;
}else{
printf("本轮 O 方下,请输入坐标:");
scanf("%d %d",&a,&b);
c=a-1;
d=b-1;
num[c][d]=-1;
}
if( Ifs( num[3][3] ) ){
ret=1;
if( whichone( int num[3][3] ) ){
printf("恭喜X赢得比赛!");
}else printf("恭喜O赢得比赛!");
}
}
return 0;
}
void painting( int num[][3] )
{
int i,j;
int count=1;
for(j=0;j<3;j++){
for(i=0;i<3;i++){
if(num[i][j]=-1){
printf("O\t");
}
if(num[i][j]=0){
printf("?\t");
}
if(num[i][j]=1){
printf("X\t");
}
count++;
if(count%3==0){
printf("\n");
}
}
}
}
int ifs( int num[][3] )
{
int ret=0;
int really[8]={};//1-3行4-6列7-8斜
int i;
really[0]=num[0][0]+num[0][1]+num[0][2];
really[1]=num[1][0]+num[1][1]+num[1][2];
really[2]=num[2][0]+num[2][1]+num[2][2];
really[3]=num[0][0]+num[1][0]+num[2][0];
really[4]=num[0][1]+num[1][1]+num[2][1];
really[5]=num[0][2]+num[1][2]+num[2][2];
really[6]=num[0][0]+num[1][1]+num[2][2];
really[7]=num[2][0]+num[1][1]+num[0][2];
for(i=0;i<8;i++){
if( really[i]==3 || really[i] ==-3 ){
ret=1;
break;
}
}
return ret;
}
int whichone ( int num[][3] )
{
int yoy=0;
int really[8]={};//1-3行4-6列7-8斜
int i;
really[0]=num[0][0]+num[0][1]+num[0][2];
really[1]=num[1][0]+num[1][1]+num[1][2];
really[2]=num[2][0]+num[2][1]+num[2][2];
really[3]=num[0][0]+num[1][0]+num[2][0];
really[4]=num[0][1]+num[1][1]+num[2][1];
really[5]=num[0][2]+num[1][2]+num[2][2];
really[6]=num[0][0]+num[1][1]+num[2][2];
really[7]=num[2][0]+num[1][1]+num[0][2];
for(i=0;i<8;i++){
if(really[i]==3){
yoy=1;
break;
}
if(really[i]==-3){
yoy=-1;
break;
}
}
return yoy;
}
我想了解关于二维数组在函数定义中的相关知识,报错时提示指针类型不同
无法运行是什麽状态???编译出错了?
@亖夕 你好,可以帮我看下这个代码吗
在代码中,第31行 whichone函数调用时,将 int 型的关键字作为了函数名的一部分,导致编译器无法识别,需要将 int 去掉即可。此外,在 painting 函数中,判断相等的语句应该使用双等号(==)而不是单等号(=)。
下面是修改后的代码:
#include<stdio.h>
int main()
{
int num[3][3]={};//定义数组
int ret = 0;//为1时游戏结束
void painting( int num[][3] );//绘制函数
int ifs( int num[][3] );//判定游戏结束
int whichone( int num[][3] );//判定胜方
int a,b;//棋子坐标
int c,d;//实际数组坐标
int i=1;//第i轮
while(ret==0){
painting( num );
if(i%2){
printf("本轮 X 方下,请输入坐标:");
scanf("%d %d",&a,&b);//还应判定在棋盘内且之前没有下过
c=a-1;
d=b-1;
num[c][d]=1;
}else{
printf("本轮 O 方下,请输入坐标:");
scanf("%d %d",&a,&b);
c=a-1;
d=b-1;
num[c][d]=-1;
}
if( ifs( num ) ){
ret=1;
if( whichone( num ) ){
printf("恭喜X赢得比赛!");
}else{
printf("恭喜O赢得比赛!");
}
}
i++;
}
return 0;
}
void painting( int num[][3] )
{
int i,j;
int count=1;
for(j=0;j<3;j++){
for(i=0;i<3;i++){
if(num[i][j]==-1){
printf("O\t");
}
if(num[i][j]==0){
printf("?\t");
}
if(num[i][j]==1){
printf("X\t");
}
count++;
if(count%3==0){
printf("\n");
}
}
}
}
int ifs( int num[][3] )
{
int ret=0;
int really[8]={};//1-3行4-6列7-8斜
int i;
really[0]=num[0][0]+num[0][1]+num[0][2];
really[1]=num[1][0]+num[1][1]+num[1][2];
really[2]=num[2][0]+num[2][1]+num[2][2];
really[3]=num[0][0]+num[1][0]+num[2][0];
really[4]=num[0][1]+num[1][1]+num[2][1];
really[5]=num[0][2]+num[1][2]+num[2][2];
really[6]=num[0][0]+num[1][1]+num[2][2];
really