質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Q&A

解決済

1回答

1357閲覧

2次元配列で使った場所を上書きできないようにしたい

bafubafu_

総合スコア16

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

0グッド

0クリップ

投稿2022/01/13 16:01

編集2022/01/13 16:05

学校で三目並べの課題が出ました。
9マスすべてに入力できるか確認するところまで書けました。

int board[3][3]={
{0,0,0},
{0,0,0},
{0,0,0} }

printf("What is the vertical position? ");
scanf("%d", &i);
printf("What is the horizontal position? ");
scanf("%d", &j);

board[i][j]<-の場所

このように宣言して縦と横の場所を指定して打っていくんですが、
|O | | |
| | | |
| | | |
のようにすでにboard[0][0]の場所を使ったときに次のターンで[0][0]の場所を宣言したときに、
Cannot put thereと上書きできないようにしたいのですが、いい条件が思いつきません。
9マスあるので使った場所に上書きしようとしたときはすべてCannot put thereと表示させたいです。
void mark_board(int board[3][3],int turn)の関数のところの if (i < 0 || 2 < i || j < 0 || 2 < i)の条件を変えたいです。
下のソースコードの現状では上書きできてしまいます。
よろしくおねがいします。

#include <stdio.h> #define LEN_NAME 17 void print_board(int board[3][3]); void mark_board(int board[3][3], int turn); typedef struct { int num_play; /* 対戦数 */ int num_player1_win; /* Player1の勝利数 */ int num_player2_win; /* Player2の勝利数 */ int num_draw; /* 引き分け数 */ double ave_player1_win; /* Player1の勝率 */ double ave_player2_win; /* Player2の勝率 */ char player1[LEN_NAME]; /* Player1の名前 */ char player2[LEN_NAME]; /* Player2の名前 */ }PLAYDATA; int main(void) { int turn, i, count = 0; int board[3][3] = { {0,0,0}, {0,0,0}, {0,0,0} }; PLAYDATA game; printf("Enter Player1's name (max. 16 chars): "); scanf("%s", game.player1); printf("Enter Player2's name (max. 16 chars): "); scanf("%s", game.player2); printf("\n%s vs %s\n\n", game.player1, game.player2); for (i = 1; i < 10; i++) { if (count == 0) { turn = 1; count++; } else { turn = -1; count--; } mark_board(board, turn); print_board(board); } return 0; } void print_board(int board[3][3]) { int i, j; for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) { printf("|"); switch (board[i][j]) { case -1: printf("x"); break; case 0: printf(" "); break; case 1: printf("o"); break; } } printf("|\n"); } } void mark_board(int board[3][3], int turn) { int i, j; if (turn == 1) { printf("Player1's turn (o)\n"); } else { printf("Player2's turn (x)\n"); } while (1) { printf("What is the vertical position? "); scanf("%d", &i); printf("What is the horizontal position? "); scanf("%d", &j); if (i < 0 || 2 < i || j < 0 || 2 < i) { printf("Cannot put there\n"); } else { break; } } if (turn == 1) { board[i][j] = 1; } else { board[i][j] = -1; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

条件の中にboard[i][j] != 0を追加したらできました

投稿2022/01/13 16:45

bafubafu_

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問