ページ 11

ズザギコの座標(?)を使った移動

Posted: 2006年10月16日(月) 19:29
by ダッシュ
友達から教えてもらったconstを使ってズザギコをやってみようと思います。で、早速エラーなんですが、何がまずいんでしょう?警告みても初期化子が多すぎるとか出ててさっぱりです。

#include<stdio.h>
#include<windows.h>

const char ZUZA[3][49]={
" ∧∧ ",
" ⊂(゜Д゜⊂⌒`つ≡≡≡"
};

int main()
{
int i=0;
while(1){
puts(ZUZA[3]);
Sleep(80);
i++;
if(i==20)i-=20;
}
}

Re:ズザギコの座標(?)を使った移動

Posted: 2006年10月16日(月) 19:45
by 管理人
見た感じ初期化の数が多すぎることは無いですけど、
投稿の時に、半角スペースが省略されてるのかもしれませんね。
一度、ソースを
<pre>

</pre>
で囲んで投稿してもらえませんか?
<>は半角で入力してください。
後、配列は2行しかないのに3行分宣言されています。
そして、puts関数の引数がおかしいです。ここはポインタでなければいけません。
書くのは
puts(ZUZA[0]);
puts(ZUZA[1]);
puts(ZUZA[2]);
しか指定できません。
数字の部分を変数にしてもOKです。
配列のポインタの話は次に説明します。

Re:ズザギコの座標(?)を使った移動

Posted: 2006年10月16日(月) 19:53
by 管理人
int a[5];

と宣言すると
a[0]
a[1]
a[2]
a[3]
a[4]
という名前の5つの変数が用意されます。
で、この配列はaという名前で総称することが出来ます。
a[0]と具体的な配列の中の一つをさすと、一つの変数をさすことになりますが、
その総称であるaと示すと、配列のポインタを示すものです。
つまり配列のある場所、住所ですね。
putsにはその住所を引数として渡す必要があります。
ですから、具体的な配列要素を示してはいけません。

2次元配列の場合は、その上位の要素を示します。つまり

int a[5][10];

と宣言すると、たとえばa[0][0]は変数ですが、a[0]は
a[0][0],a[0][1]....a[0][9]
を総称する名前、ポインタになります。

Re:ズザギコの座標(?)を使った移動

Posted: 2006年10月16日(月) 20:49
by ダッシュ
うぉぉ・・・。ポインタですか・・・。ちょうど行き詰ってたとこです。ポインタ勉強しなおしてからまた来ます。(どれくらいかかるか分かりませんが・・・。)

ついでにソースです。
#include<stdio.h>
#include<windows.h>

const char ZUZA[3][49]={
"                                        ∧∧              ",
"                                    ⊂(゜Д゜⊂⌒`つ≡≡≡"
};

int main()
{
	int i=0;
	while(1){
		puts(ZUZA[3]);
		Sleep(80);
		i++;
		if(i==20)i-=20;
	}
}


psうわ・・・。アイコン変えずに投稿したから、最初の投稿のとこ「お礼」になってる・・・。

Re:ズザギコの座標(?)を使った移動

Posted: 2006年10月16日(月) 21:00
by 管理人
これは初期化子多すぎですよ^^;
49バイト分のスペースを確保せよ
と配列を宣言しているのに
59バイト分も中身に格納しようとしています。

「お礼」を「質問」に変更しておきましたよ^^

ポインタは、難しいと思わなくても、putsで使う概念くらい簡単ですから、大丈夫ですよ^^

さっきの説明じゃわかりにくかったかな?

とりえあえず、自分で

int a[10];

と宣言して配列を作ったとき、
a

a[0]
では、どう意味が違うのか、抑えることが重要です!

Re:ズザギコの座標(?)を使った移動

Posted: 2006年10月16日(月) 21:15
by GPGA
> [color=00B0FF">const[/color] [color=00B0FF]char[/color] ZUZA[3][49]={
> "                                        ∧∧              ",
> "                                    ⊂(゜Д゜⊂⌒`つ≡≡≡"
> };
初期化子がわかりにくい配列を扱う場合には、以下のようにすると勝手に初期化してくれますよ~
なお、ZUZAの使い方は二次元配列の時と何も変わりません。
[color=00B0FF">const[/color] [color=00B0FF]char[/color]* ZUZA[3] = {
"                                        ∧∧              ",
"                                    ⊂(゜Д゜⊂⌒`つ≡≡≡"
};