保持ascii值在char预期的位置

时间:2012-09-09 10:38:24

标签: c ascii

选择坐标时,应替换为“〜”。但是,它被替换为〜而不是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 个答案:

答案 0 :(得分:0)

要存储坐标,您使用的是整数数组。执行时

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

答案 1 :(得分:0)

就C语言而言,字符'〜'和数字126之间没有区别,'〜'== 126。 (您使用了“〜”,我通常会将其用作字符串,但我认为您实际上并不是这样说的。)

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

答案 2 :(得分:0)

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

由于您的电路板是 int 的矩阵,因此当您指定'~'时,您实际上将数字126分配给电路板的位置。如果检查该位置,预期结果是使 int 等于126。

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

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来说它们是同一个东西 - 你可以使用其他一些你知道董事会不会持有的价值,比如-1或类似的东西。)

<强>更新

所以,如果我没有弄错,你要做的就是从随机整数的二维矩阵读取数字,并在读取它们时标记

如果这是你想要达到的目标,那么你使用'〜'标记阅读位置的想法是行不通的。我之前的意思是,在C 中,126和字符'〜'完全相同。因此,您将无法区分您编写'〜'字符的位置以及偶然存储随机126的那些位置。

如果您恰好在阵列中存储整数,请使用-1代替'~'。这将告诉您该职位是否已被阅读。

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

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';)。

答案 3 :(得分:0)

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

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

它将'〜'转换为整数,即转换为ascii值126 并且因为它变成 board [row_target] [column_target] = 126

我建议将制作为二维字符数组。希望它能解决你的问题。

如果你只想把它作为整数,那么将126视为特殊的no,通过声明来表示'〜'