- 締切済み
乱数に関する質問
(使ってる開発環境はBCCDeveloperです) 乱数に関する質問なんですが 構造体の中の変数に乱数を代入しようとすると 代入したい乱数が、その前後にある構造体に入れようよした数が乱数の値になってしまいます それはどうしてなのでしょうか またどうやって解決すればいいでしょうか 文章の説明だけではわかりずらいと思うので ↓にコメント入りでその詳細を書きました #include<stdio.h> #include <stdlib.h> struct hop{ int kougeki; int gard; int hit; }; struct kio{ int atock; int bougyo; int lis; }; int tekiw(); int sare(); void main(){ int i=8; struct kio teki; struct hop player; player.kougeki= 40 player.gard =50 player.hit= 60 int p; srand((unsigned)time( NULL )); if(i=8){ teki.atock=rand()%60; //ここら変の乱数の値が上の構造体変数に代入した どれかの数になっている teki.bougyo= rand()%50; //ここも同じ teki.lis =rand()%40; //ここも同じ }; p=8; tekiw(); }; int tekiw(struct kio teki){ printf("%d",teki.lis); return teki.lis; };
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- sha-girl
- ベストアンサー率52% (430/816)
player.kougeki= 40 player.gard =50 player.hit= 60 セミコロンがなくこれではコンパイルすら通りません。 元のソースを色々削っていませんか? 恐らく配列(あるいはポインタ)でやっていて、誤って隣の配列まで書き換えてるって ミスの類のような気がします。 struct kio teki[100]; のように if(i=8){ あとこれがおかしい。必ず真になります。 if(i==8){ では?
- ggaogg
- ベストアンサー率43% (38/88)
tukaiさんのソースは改行が妙に多いのでちょっと直して改行省いてみました。 #include<stdio.h> #include <stdlib.h> struct hop{ int kougeki;//攻撃 int gard;//ガード int hit;//ヒット }; struct kio{ int atock; int bougyo; int lis; }; int tekiw(); int sare(); void main(){ int i=8; //? struct kio teki; struct hop player={40,50,60}; int p; //? srand((unsigned)time( NULL )); if(i=8){ teki.atock=rand()%60; //ここら変の乱数の値が上の構造体変数に代入した どれかの数になっている teki.bougyo= rand()%50; //ここも同じ teki.lis =rand()%40; //ここも同じ }; p=8; //? tekiw(); //? }; int tekiw(struct kio teki){ printf("%d",teki.lis); return teki.lis; }; 幾分かみやすくなったと思います。これによって回答する気になった方はしてあげてくださいね。 ちなみに、「//?」というコメントは、理解できない部分です。 あと、main関数の中にある tekiw(); これは型があってないんじゃないでしょうか。 tekiw(teki); ならまだしも。 sare()も、型宣言はされているのに、どこにもでてきてない部分も謎です。 >構造体の中の変数に乱数を代入しようとすると >代入したい乱数が、その前後にある構造体に入れようよした数が乱数の値になってしまいます つまり構造体の中の1つに乱数を代入しようとしたけど代入しようとした乱数がそこに入らないでその前後に入ってしまう、ということでしょうか。 いずれにしろ補足の説明や、切り抜いているのであれば、把握に必要な範囲のソースをお願いします。どういう結果になるのかは、プログラムを走らせてみないと分からないので。(ということで、結局はまともな回答できないということですが・・。) 老婆心ですが、敵とプレイヤーの構造体はそれぞれで作成する必要はないと思います。
お礼
有難う御座いました おかげで問題は解決しました
お礼
if(i==8){ ガ正しいですね コピペではないので っちょっと書き間違えてしまいました お陰で問題が解決しました 有難う御座いました