用用户输入的字符替换下划线(在C中)

时间:2017-11-26 23:15:18

标签: c arrays replace

这是家庭作业

我必须编写一个TicTacToe游戏,我唯一的问题就是格式化。这是我的矩阵功能,用户和计算机必须输入他们的O和X.

void the_matrix() { // Like the movie
//Get rid of the underscores 

 int m;

printf("The current state of the board:\n");
 for (m = 0; m < 3; m++) {
printf("%c_ %c_ %c_\n", table[m][0], table[m][1], table[m][2]);
  }
printf("\n");
}

所以该项目要求编译器像这样显示游戏(为了简单起见,我只显示第一行应该在这篇文章中的样子。):

&#34; _ _ _&#34; [忽略引号]

然后用户输入“&#39; O&#39;对于(1,1)位置

O _ _。

当我运行我的程序时,它看起来像这样

O_ _ _

我知道为什么程序会这样做,因为我的printf语句将其设置为那样。但我的问题是如何将下划线与O或X交换,因此下划线不会显示。

任何帮助都会得到帮助!

2 个答案:

答案 0 :(得分:2)

printf ("%c_")将打印一个后跟下划线的字符。

你需要的是printf ("%c"),论证应决定你是否打印O,X或下划线。

第二个想法,最简单的做法是将数组初始化为在每个空间都有_,你的逻辑应该认识到&#34;空&#34;。然后你可以打印出阵列中出现的字符。

答案 1 :(得分:1)

我将电路板的逻辑/状态与显示它的方式区分开来。因此,董事会的价值可以有明确的含义,例如0表示空白,1表示玩家1,2表示玩家2,而打印方式则可能不同取决于您是否具有GUI或终端。特别是您的算法不依赖于显示问题,例如您不必更改算法只是因为您决定按.而不是-显示空白字段:

请参阅以下代码说明此方法:

typedef enum {
    BLANK = 0,
    PLAYER1 = 1,
    PLAYER2 = 2
} BoardValue;

BoardValue table[3][3] = { BLANK };

char displayValue(int state) {
    return (state == PLAYER1 ? 'O' : (state == PLAYER2 ? 'X' : '-'));
}

void the_matrix() { // Like the movie
    //Get rid of the underscores

    int m;

    printf("The current state of the board:\n");
    for (m = 0; m < 3; m++) {
        printf("%c %c %c\n", displayValue(table[m][0]), displayValue(table[m][1]), displayValue(table[m][2]));
    }
    printf("\n");
}


int main() {

    table[0][0] = PLAYER1;
    table[1][1] = PLAYER2;

    the_matrix();
}