0

选择坐标时,应将其替换为“~”。但是,它被替换为 ~ 的 ascii 值(126)。我尝试了一些不同的东西,但我总是得到 126 而不是 ~。有任何想法吗?谢谢您的帮助!

int board_is_empty(int N, int board[ROWS][COLS])
{
    int i = 0, j = 0;
    for (i = 0; i < N; i++)
    {
        for (j = 0; j < N; j++)
        {
            if (board[i][j] != '~')
            {
                return 0;
            }
        }
    }
    return 1;
}

//updates the board to replace each selected coordinate with a ~.
//returns nothing
void update_board (int board[ROWS][COLS], int row_target, int column_target)
{

    board[row_target][column_target] = '~';
}

int main(void)
{
    int game_board[ROWS][COLS] = {0};
    int rows, columns = 0;
    int players_turn = 1, target_column = -1, target_row = -1, value = 0;
    int row_selection = 0, column_selection = 0;
    int i = 0;

    initialize_game_board(game_board);
    display_board(game_board);
    generate_starting_point(game_board, &rows, &columns);

    printf ("\nPlease hit <Enter> to continue.\n");
    getchar ();

    while (board_is_empty(ROWS, game_board) != 1)
    {
        select_target (&target_row, &target_column, players_turn);
        value += game_board[target_row][target_column];
        update_board (game_board, target_row, target_column); //should cause the coordinates at target_row && target_column to be replaced with a ~
        display_board(game_board);
    }
    printf("\n%d", value);

}
4

4 回答 4

0

为了存储您的坐标,您使用的是整数数组。当你执行

board[row_target][column_target] = '~'; 波浪号的 ascii 值 (126) 分配给 LHS。您无法将字符分配给整数值。我认为你应该使用一些特殊的数字而不是波浪号。如果我是你,我会使用 INT_MIN 或 INT_MAX。

于 2012-09-09T10:57:42.150 回答
0

就 C 语言而言,字符 '~' 和数字 126 之间没有区别,'~' == 126。(您使用了我通常用于字符串的“~”,但我假设你实际上并不是那个意思)。

如果要显示一个值,则必须使用正确的格式字符串。%d 用于十进制整数, %c 用于字符(保存值的变量也应该是字符)

于 2012-09-09T11:00:49.103 回答
0

在 C 中,字符只是整数。在输出时它们被表示为字符,但在内部它们只保存该字符的 ASCII 码。

由于您的板是int的矩阵,因此当您分配时,'~'您实际上是将数字 126 分配给板的位置。如果你检查那个位置,预期的结果是得到一个等于 126的int 。

但是,如果您想将该值视为一个字符,可以通过将该数字转换为字符来实现:

printf("%c", value);

看一看:

#include <stdio.h>

int main()
{
    int i = '~';
    char c = '~';

    printf("Integer: %d\n", i); /* outputs: 126 */
    printf("Char: %c\n", c); /* outputs: ~ */
    printf("Integer casted to char: %c\n", i); /* outputs: ~ */
}

也就是说,你的价值是对的。你只需要得到你想要的表示。(如果您希望能够同时将值 126 存储在棋盘角色~中,那么您就不走运了,因为对于 C,它们是相同的——您可以使用您知道的其他值board 不会持有,比如 -1 或类似的东西)。

更新:

因此,如果我没有弄错,您要做的是从随机整数的二维矩阵中读取数字,并在阅读时标记每个数字。

如果那是您想要实现的目标,那么您使用“~”来标记读取位置的想法是行不通的。我之前的意思是,在 C 中,126 和字符 '~' 是完全相同的东西。因此,您将无法区分您写入“~”字符的位置和偶然存储随机 126 的位置。

如果您碰巧在数组中存储整数,请使用-1而不是'~'. 这将告诉您该职位是否已被阅读。

如果您正在存储任何可能的随机整数,那么您可以在该数组中存储任何可用于将位置标记为已读的内容。在这种情况下,一种可能的解决方案是像这样定义您的数组:

typedef struct {
    int value;
    char marked;
} Position;

Position board[ROWS][COLS];

因此,对于每个位置,您可以存储如下值:

board[row][col].value = 23123;

您可以将其标记为已读,如下所示:

board[row][col].marked = 'y';

board[row][col].marked = 'n';只是,当你用随机整数填充矩阵时,不要忘记将位置标记为未读 ( )。

于 2012-09-09T11:01:12.720 回答
0

'~'是一个字符,您已将board 声明为二维整数数组。

所以当你写board[row_target][column_target] = '~';

它将“~”转换为整数,即转换为 126 的 ascii 值,因此它变为board[row_target][column_target] = 126

我建议将板子做成二维字符数组。希望它能解决你的问题。

如果您只想将其作为整数,则将 126 视为特殊的 no,这意味着通过声明“~”

于 2012-09-09T15:53:47.667 回答