首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的程序的逻辑有什么问题?

我的程序的逻辑有什么问题?
EN

Stack Overflow用户
提问于 2013-04-20 06:29:35
回答 3查看 133关注 0票数 0

我的程序逻辑有什么问题。由于某种原因,当我在玩家之间交替的时候,当它到达第二回合的时候,它会跳过它,而游戏似乎被拖曳了一步。即使当我在主函数之上声明数组时,数组也会改变吗?tictactoe游戏的位置是

1\x{e76f}2/3

4\x{e 010}5

6-8-9

代码

代码语言:javascript
复制
#include <stdio.h>
int check(char player);
void move(char player);
void outprint(void);
char board[3][3] ;



int main(void)
{
int first;
char player1, player2;

        printf("Player 1: Choose your symbol: \n");
        player1 = getchar();
        getchar();

        printf("Player 2: Choose your symbol: \n");
        player2 = getchar();
        getchar();



int i=0;
int win;
char turn;
while(win == 0)
{
        if((i%2) == 0){
                turn = player1;
                move(player1);
                win = check(player1);
                outprint();}
        else {
                turn = player2;
                move(player2);
                win = check(player2);
                outprint();}
        i++;
}

        if (i == 8)
                printf("its a tie");
        else
                printf("the winner is %c", turn);

return 0;
}

/*printing the board that takes in a placement int*/
void outprint(void)
{
        int r;
        printf("\n");
        for (r = 0; r < 3; r++){
                printf(" %c | %c | %c \n" , board[r][0], board[r][2], board[r][3]);
        if (r != 2)
                printf("___________\n");
        } printf("\n");
return;
}

/*check to see if someone won*/
int check(char player)
{
        int r, c;

        for ( r = 0 ; r <3 ; r++)
        {
                if ((board[r][0] == player) && (board[r][1] == player) && (board[r][2] == player))
                        return 1;
        }

        for ( c = 0 ; c <3 ; c++)
        {
                if ((board[0][c] == player) && (board[1][c] == player) && (board[2][c] == player))
                        return 1;
        }

        if((board[0][0] == player) && (board[1][1] == player) && (board[2][2] == player))
                return 1;

        if((board[0][2] == player) && (board[1][1] == player) && (board[2][0] == player))
                return 1;

        return 0;
}


void move(char player)
{
        int place;
        printf("player %c, enter placement: \n", player);
        scanf("%d", &place);

        if (place == 1)
                board[0][0] = player;
        else if (place == 2)
                board[0][1] = player;
        else if (place == 3)
                board[0][2] = player;

        else if (place == 4)
                board[1][0] = player;
        else if (place == 5)
                board[1][1] = player;
        else if (place == 6)
                board[1][2] = player;

        else if (place == 7)
                board[2][0] = player;
        else if (place == 8)
                board[2][1] = player;
        else if (place == 9)
                board[2][2] = player;
}

输出

代码语言:javascript
复制
Player 1: Choose your symbol: 
x
Player 2: Choose your symbol: 
o
player x, enter placement: 
1

 x |  |  
___________
  |  |  
___________
  |  |  

player o, enter placement: 
2

 x |  |  
___________
  |  |  
___________
  |  |  

player x, enter placement: 
3

 x | x |  
___________
  |  |  
___________
  |  |  

player o, enter placement: 
4

 x | x | o 
___________
 o |  |  
___________
  |  |  

player x, enter placement: 
5

 x | x | o 
___________
 o |  |  
___________
  |  |  

player o, enter placement: 
6

 x | x | o 
___________
 o | o |  
___________
  |  |  

player x, enter placement: 
7

 x | x | o 
___________
 o | o | x 
___________
 x |  |  

the winner is x
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-20 07:16:58

尝试将getchar()添加到scanf("%d“&place)函数中,就像在第一个输入条目中所做的那样:

代码语言:javascript
复制
void move(char player)
{
    int place;
    printf("player %c, enter placement: \n", player);
    scanf("%d", &place);
    getchar();
票数 0
EN

Stack Overflow用户

发布于 2013-04-20 06:39:19

1,在void outprint(void)中,更改

代码语言:javascript
复制
printf(" %c | %c | %c \n" , board[r][0], board[r][2], board[r][3]);

转到

代码语言:javascript
复制
printf(" %c | %c | %c \n" , board[r][0], board[r][1], board[r][2]);

2,在int main(void)中,将int win;转换为int win = 0;

票数 2
EN

Stack Overflow用户

发布于 2013-04-20 06:35:04

看起来你需要把黑板初始化成空格。

代码语言:javascript
复制
char board[3][3] = { "   ", "   ", "    " };

看上去你什么都没印。可能来自未初始化数据的不可打印垃圾。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16117439

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档