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

C言語に関する限り、文字「〜」と数字126の間に違いはありません。「〜」==126。(通常は文字列に使用する「〜」を使用しましたが、あなたは実際にそれを意味するのではありません)。

値を表示する場合は、正しいフォーマット文字列を使用する必要があります。%dは10進整数用、%cは文字用です(値を保持する変数もcharである必要があります)

于 2012-09-09T11:00:49.103 に答える
0

Cでは、charは単なる整数です。出力時には文字として表されますが、内部的にはその文字のASCIIコードのみを保持します。

ボードはintの行列であるため、割り当てる'~'ときは、ボードの位置に番号126を効果的に割り当てています。その位置を確認すると、期待される結果は126に等しいintを取得することです。

ただし、その値を文字として表示したい場合は、その数値をcharにキャストすることで実行できます。

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などのように保持されません)。

アップデート:

ですから、私が誤解していなければ、あなたがやろうとしていることは、ランダムな整数の2次元行列から数値を読み取り、それらを読み取るときにそれぞれにマークを付けることです。

それがあなたが達成しようとしていることである場合、読み取り位置をマークするために「〜」を使用するというあなたの考えはうまくいきません。私が前に意味したのは、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[row_target][column_target] = '~'; チルダの ascii 値 (126) は LHS に割り当てられます。文字を整数値に割り当てる方法はありません。チルダではなく、特別な番号を使用する必要があると思います。私があなたなら、INT_MIN または INT_MAX を使用します。

于 2012-09-09T10:57:42.150 に答える
0

'~'文字で、 board を 2 次元整数配列として宣言しています。

したがって、board[row_target][column_target] = '~';と書くと、

'~' を整数、つまり 126 の ASCII 値に変換すると、board[row_target][column_target] = 126になります。

ボードを 2 次元文字配列として作成することをお勧めします。うまくいけば、それはあなたの問題を解決します。

そして、整数のみが必要な場合は、126 を特別な no と見なします。これは、宣言することで「〜」を意味します

于 2012-09-09T15:53:47.667 に答える