二次元配列の書き換えができない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
WingKnight

二次元配列の書き換えができない

#1

投稿記事 by WingKnight » 7年前

C言語にまだまだ慣れていない者です。ご容赦ください。
下記のソースコードでオセロゲームを作ろうとしています。
オセロゲームの外枠(ソースコートでは番兵と書いてあるところ)
を'l'と'-'を使って作ろうとしました。

その際、board[9][wallLoop] = '-';を作ってオセロゲームの
一番下(10行目)に"----------"を作りたかったのですが、
board[9][0]の部分だけ、'l'がなぜか入って"l---------"となってしまいます。
その理由を教えて頂けたらありがたいです。
どうかよろしくお願いします。

コード:

#include <stdio.h>
#include <stdlib.h>

int main()
{
	//オセロゲームを作る
	//要素:
	//盤
	char board[10][10];
	//8*8のオセロ盤の外は番兵
	//石がない場所は0
	for (int i = 0; i < __crt_countof(board); i++)
	{
		for (int num = 0; num < __crt_countof(board); num++)
		{
			board[i][num] = '0';
		}
	}

	for (int wallLoop = 0; wallLoop < __crt_countof(board); wallLoop++)
	{
		//1列目の番兵
		board[wallLoop][0] = 'l';
		//10列目の番兵
		board[wallLoop][9] = 'l';
		//1行目の番兵
		board[0][wallLoop] = '-';
		//10行目の番兵
		board[9][0] = '-'; //← なぜここをwallLoopで0で置き換えるとlが表示される?
		if (0 != wallLoop)
		{
			board[9][wallLoop] = '-';
		}[/highlight]
	}

	for (int i = 0; i < __crt_countof(board); i++)
	{
		for (int num = 0; num < __crt_countof(board); num++)
		{
			printf("%c", board[i][num]);
		}
		printf("\n");
	}


	//黒石と白石
	/*
	プレーヤー2人(一人はCPUでも可)
	ターン
	石を置く
	石をひっくり返す
	*/
		

	printf("\nstop");
	system("pause");

	return 0;
}
 

かずま

Re: 二次元配列の書き換えができない

#2

投稿記事 by かずま » 7年前

WingKnight さんが書きました:
7年前
board[9][0]の部分だけ、'l'がなぜか入って"l---------"となってしまいます。

コード:

wallLoop が 0 の時、board[9][0] = '-'; が実行され、
wallLoop が 9 の時、board[9][0] = 'l'; が実行されるから。
同じところに重ね書きしないほうが良いと思います。

コード:

#define N 8

	char board[N+2][N+2];    //盤: 8*8のオセロ盤の外は番兵

	for (int i = 1; i <= N; i++) {
		for (int j = 1; j <= N; j++)
			board[i][j] = '0';    //石がない場所は '0'
		board[i][0] = board[i][N+1] = 'l';
	}
	for (int j = 0; j <= N+1; j++)
		board[0][j] = board[N+1][j] = '-';

WingKnight

Re: 二次元配列の書き換えができない

#3

投稿記事 by WingKnight » 7年前

教えてくださって大変ありがとうございます。
解決しました。

返信

“C言語何でも質問掲示板” へ戻る