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

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

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

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

多次元配列

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

解決済

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

bafubafu_
bafubafu_

総合スコア16

C

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

多次元配列

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

1回答

0評価

0クリップ

250閲覧

投稿2022/01/13 16:01

編集2022/01/14 01:45

学校で三目並べの課題が出ました。
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; } }

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

C

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

多次元配列

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