选择坐标时,应替换为“〜”。但是,它被替换为〜而不是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);
}
答案 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,通过声明来表示'〜'