c新手吧 关注:8,558贴子:48,066
  • 1回复贴,共1

新手求教,请问一下问题出在哪里?

取消只看楼主收藏回复

代码如下
#include <stdio.h>
#include <ctype.h>
int main(void)/*做一个简易五子棋程序*/
{
int player = 0;
int winner = 0;
int choice = 0;
int row = 0;
int column = 0;
int line = 0;
char game_start = 'Y';
char board [5][5] = {/*标记每个格子的位置*/
{'1','2','3','4','5'},
{'6','7','8','9','10'},
{'11','12','13','14','15'},
{'16','17','18','19','20'},
{'21','22','23','24','25'}
};
for(int i = 0 ; i <= 25 && winner == 0;i++)
{/*绘制格子*/
printf(" %2c | %2c | %2c | %2c | %2c \n",board[0][0],board[0][1],board[0][2],board[0][3],board[0][4]);
printf("-----+-----+-----+-----+-----\n");
printf(" %2c | %2c | %2c | %2c | %2c \n",board[1][0],board[1][1],board[1][2],board[1][3],board[1][4]);
printf("-----+-----+-----+-----+-----\n");
printf(" %4c | %2c | %2c | %2c | %2c \n",board[2][0],board[2][1],board[2][2],board[2][3],board[2][4]);
printf("-----+-----+-----+-----+-----\n");
printf(" %2c | %2c | %2c | %2c | %2c \n",board[3][0],board[3][1],board[3][2],board[3][3],board[3][4]);
printf("-----+-----+-----+-----+-----\n");
printf(" %2c | %2c | %2c | %2c | %2c \n",board[4][0],board[4][1],board[4][2],board[4][3],board[4][4]);
/*玩家更替*/
player = i%2+1;
do
{/*提示玩家选择格子*/
printf("Player %d,please enter the number to place your %c in the board\n",player,(player == 1)?'O':'X');
scanf("%d",&choice);
row = --choice/5;
column = choice%5;
}while(choice<0 || choice>25 || board[row][column] == 'O' || board[row][column] == 'X');/*判断格子选择正误*/
board[row][column]=(player == 1)?'O':'X';/*填入'X','O'*/
/*判断获胜条件是否达成*/
if(board[0][0] == board[1][1] && board[0][0] == board[2][2] && board[0][0] == board[3][3] && board[0][0] == board[4][4]
|| board[0][4] == board[1][3] && board[0][0] == board[2][2] && board[0][0] == board[3][1] && board[0][0] == board[4][0])
winner=player;
else
{
for(int line = 0;i < row;i++)
if(board[line][0] == board[line][1] && board[line][0] == board[line][2] && board[line][0] == board[line][3] && board[line][0] == board[line][4]
|| board[0][line] == board[1][line] && board[0][line] == board[2][line] && board[0][line] == board[3][line] && board[0][line] == board[4][line])
winner = player;
}
};
if(winner == 0)
printf("How pity!A draw game.");
else
printf("Congratulations!Player %d,you win the game!\n",player);
return 0;
}
/*剩余问题:方格内两位数不能正确显示*/
运行结果如图所示

从10开始显出都出问题了(例如第三行第一个是11显示成1了...),萌新表示试了好几种方法貌似都是各种问题,求大神指点


IP属地:广东1楼2016-01-29 17:05回复
    于是,我又回来了
    既然没法同一种格式显示数字和字符两种类型,那就统一成字符好了(虽然我用的方法貌似很笨)
    不多说了,上代码
    /*做一个五子棋程序*/
    #include <stdio.h>
    int main(void)
    {
    int player = 0;
    int winner = 0;
    int row = 0;
    int column = 0;
    int line = 0;
    char board [5][5] = {/*标记每个格子的位置*/
    {' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' '},
    {' ',' ',' ',' ',' '}
    };
    for(int i = 0 ; i <= 25 && winner == 0;i++)
    {/*绘制格子*/
    printf(" 1 2 3 4 5 \n");
    printf(" +----+----+----+----+----+\n");
    printf("1 | %2c | %2c | %2c | %2c | %2c |\n",board[0][0],board[0][1],board[0][2],board[0][3],board[0][4]);
    printf(" |----+----+----+----+----|\n");
    printf("2 | %2c | %2c | %2c | %2c | %2c |\n",board[1][0],board[1][1],board[1][2],board[1][3],board[1][4]);
    printf(" |----+----+----+----+----|\n");
    printf("3 | %2c | %2c | %2c | %2c | %2c |\n",board[2][0],board[2][1],board[2][2],board[2][3],board[2][4]);
    printf(" |----+----+----+----+----|\n");
    printf("4 | %2c | %2c | %2c | %2c | %2c |\n",board[3][0],board[3][1],board[3][2],board[3][3],board[3][4]);
    printf(" |----+----+----+----+----|\n");
    printf("5 | %2c | %2c | %2c | %2c | %2c |\n",board[4][0],board[4][1],board[4][2],board[4][3],board[4][4]);
    printf(" +----+----+----+----+----+\n");
    /*玩家更替*/
    player = i%2+1;
    do
    {/*提示玩家选择格子*/
    printf("Player %d,please enter the number to place your %c in the board\n",player,(player == 1)?'O':'X');
    scanf("%d %d",&row,&column);
    }while(row<1 || column<1 || row>5 || column>5 || board[column-1][row-1] == 'O' || board[column-1][row-1] == 'X');/*判断格子选择正误*/
    board[column-1][row-1]=(player == 1)?'O':'X';/*填入'X','O'*/
    /*判断获胜条件是否达成*/
    if( board[0][0] != ' ' && board[0][0] == board[1][1] && board[0][0] == board[2][2]
    && board[0][0] == board[3][3] && board[0][0] == board[4][4]
    || board[0][4] != ' ' && board[0][4] == board[1][3] && board[0][4] == board[2][2]
    && board[0][4] == board[3][1] && board[0][4] == board[4][0])
    winner=player;
    else
    {
    for(line = 0;line < 5;line++)
    if(board[line][0] != ' ' && board[line][0] == board[line][1] && board[line][0] == board[line][2]
    && board[line][0] == board[line][3] && board[line][0] == board[line][4]
    || board[0][line] != ' ' && board[0][line] == board[1][line] && board[0][line] == board[2][line] && board[0][line] == board[3][line] && board[0][line] == board[4][line])
    winner = player;
    }
    }/*和for配对的大括号*/
    if(winner == 0)
    printf("How pity!A draw game.");
    else
    printf("Congratulations!Player %d,you win the game!\n",player);
    return 0;
    }
    输出结果(个人感觉目前最大的缺陷是有人胜利的话最后一步棋显示不出来...)

    P.S.
    顺便用字符数组将数字当成字符输出似乎是可以的...我也是看着教材上是这么写的才仿写下来了,毕竟照着打感觉不会有什么进步,楼下是图


    IP属地:广东4楼2016-02-02 17:40
    收起回复