c语言函数调用问题char类型,回答好追加分

首先说一下环境,是在ubuntu下用gedit调试的。不过我觉得在tc下应该一样吧。
然后谢谢各位的帮忙,程序代码在最后,就是一个用c语言编辑的3子棋游戏(类似5子棋)代码大体好了,就是judge()函数的声明类型应该写什么?
在judge()中如果判断成功返回1,失败返回0,borad是char型,judge()是int类型么?然后声明是放在main里面还是前面。
请大家给出意见,最好能给我一个调试通过的,帮我解决掉那个类型错误。回答的详细的一定追加分数。谢谢。
代码如下:
#include <stdio.h>
int judge(char);
int main (void)
{
int player = 0;
int winner = 0;
int line = 0;
int choice = 0;
int row = 0;
int column = 0;
int d = 0;
int i = 0;
char board[3][3] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'}
};
for(i ; i<9 && winner==0; i++)
{
printf("\n\n");
printf(" %c | %c | %c\n", board[0][0], board[0][1], board[0][2]);
printf("---+---+---\n");
printf(" %c | %c | %c\n", board[1][0], board[1][1], board[1][2]);
printf("---+---+---\n");
printf(" %c | %c | %c\n", board[2][0], board[2][1], board[2][2]);
player = i%2 + 1;
do
{
printf("\n玩家 %d, 你想把你的标志%c放在那里?",
player,(player==1)?'X':'O');
scanf("%d", &choice);
row = --choice/3;
column = choice%3;
}while(choice<0 || choice>9 || board[row][column]>'9');

board[row][column] = (player == 1) ? 'X' : 'O';
if (judge(board[3][3])==1)
winner = player;
}
printf("\n\n");
printf(" %c | %c | %c\n", board[0][0], board[0][1], board[0][2]);
printf("---+---+---\n");
printf(" %c | %c | %c\n", board[1][0], board[1][1], board[1][2]);
printf("---+---+---\n");
printf(" %c | %c | %c\n", board[2][0], board[2][1], board[2][2]);

if(winner == 0)
printf("\n真无聊,这一局是平局……\n");
else
printf("\n恭喜你,玩家%d。你赢了!\n",winner);

return 0;
}

int judge(char board[3][3])
{
int line = 0;
int a = 0;
char board1[3][3] = {
{'1','2','3'},

{'4','5','6'},

{'7','8','9'}
};
if(board1[0][0]==board1[1][1] && board1[0][0]==board1[2][2])
return a = 1;

else if(board1[2][0]==board1[1][1] && board1[2][0]==board1[0][2])
return a = 1;

else
for(line ; line <= 2; line ++)
if(board1[line][0]==board1[line][1] && board1[line][0]==board1[line][2])
return a = 1;
else if(board1[0][line]==board1[1][line] &&board1[0][line]==board1[2][line])
return a = 1;
else return a = 0;
}
用gcc命令运行的,gcc -o 33 yu.c 当然tc下也行。
报错如下
yu.c:75: error: conflicting types for ‘judge’
yu.c:3: note: previous declaration of ‘judge’ was here
谢谢coffeegg1985 和 gaplee 。但是现在程序是能运行了,但是要完成的功能没有达到啊,judge并没有判断输入的board数组啊,也没有返回值1,不会判断你是非会赢棋,就是3个子连成1行。如果不写子函数,都写在main里可以判断的。已经追加分数,再次谢谢回答的人。

自定义函数有返回值的不能定义为void,没有返回值的定义为void,你的情况我也不太清楚,
申明的摆放,具体就是比如说你的函数不管是main()还是void()在函数里要使用到其他的函数比如说f1(),f1写在main()前面的话不用申明,如果f1()写在main()后面的话就要在
main()前面加个f1()的申明

有全部代码吗?
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-04-27
声明部分用
int judge(char borad[3][3]);
调用部分
if (judge(board[3][3])==1) //改为if(judge(borad)==1),不然你传进去的是一个越界的数值
winner = player;
第2个回答  推荐于2016-07-08
请参照你贴出来的程序看我的注释

#include <stdio.h>

int judge(char board[3][3]);//原文件此处的声明与下面的函数不一致,
//由于你下面的函数里面是数组形式的,
//此处不能为一个空类型
int main (void)
{
int player = 0;
int winner = 0;
// int line = 0;
int choice = 0;
int row = 0;
int column = 0;
// int d = 0;
int i = 0;
char board[3][3] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'}
};
for(i=0;i<9&&winner==0;i++) //此处为一个warning,你的i没有在括号里面赋值
{ //可以省略如这样for(;i<9&&winner==0;i++)
printf("\n\n");
printf(" %c | %c | %c\n", board[0][0], board[0][1], board[0][2]);
printf("---+---+---\n");
printf(" %c | %c | %c\n", board[1][0], board[1][1], board[1][2]);
printf("---+---+---\n");
printf(" %c | %c | %c\n", board[2][0], board[2][1], board[2][2]);
player = i%2 + 1;
do
{
printf("\n玩家 %d, 你想把你的标志%c放在那里?",
player,(player==1)?'X':'O');
scanf("%d", &choice);
row = --choice/3;
column = choice%3;
}while(choice<0 || choice>9 || board[row][column]>'9');

board[row][column] = (player == 1) ? 'X' : 'O';
if (judge(board)==1) //引用数组时值传递数组名就可以,数组名相当于一个指针
winner = player;
}
printf("\n\n");
printf(" %c | %c | %c\n", board[0][0], board[0][1], board[0][2]);
printf("---+---+---\n");
printf(" %c | %c | %c\n", board[1][0], board[1][1], board[1][2]);
printf("---+---+---\n");
printf(" %c | %c | %c\n", board[2][0], board[2][1], board[2][2]);

if(winner == 0)
printf("\n真无聊,这一局是平局……\n");
else
printf("\n恭喜你,玩家%d。你赢了!\n",winner);

return 0;
}

int judge(char board[3][3])
{

int a = 0;
int line = 0;
char board1[3][3] = {
{'1','2','3'},

{'4','5','6'},

{'7','8','9'}
};
if(board1[0][0]==board1[1][1] && board1[0][0]==board1[2][2])
return a = 1;

else if(board1[2][0]==board1[1][1] && board1[2][0]==board1[0][2])
return a = 1;

else
{
for(line=0;line<=2;line++) //此处也为一个warning,和main函数中问题一样
{
if(board1[line][0]==board1[line][1] && board1[line][0]==board1[line][2])
return a = 1;
else if(board1[0][line]==board1[1][line] &&board1[0][line]==board1[2][line])
return a = 1;
else
return a = 0;

}
}
return a=1;//注意此处,有返回值的函数末尾应有return语句,此处是一个warning
}
我修改了你贴出来的程序中的warning与error本回答被提问者采纳
第3个回答  2010-04-27
int judge(char **);

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网