GetNowCount()について

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

GetNowCount()について

#1

投稿記事 by JugS » 17年前

クラスAのデータメンバ block[10][10] をすべて0で初期化したあとに
クラスAのコンストラクタ内で

A::A(){
int count=0;

for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
if(count < 10){
block[j] = GetNowCount()%2;
if(block[j] != 0)
count++;
}
}
}

というふうに
block[10][10]の中の要素10個にランダムで1を入れたいのですが、
何度実行してもblock[0][0]から block[0][9]までに
0か1が入ってしまうんです。
コンパイルし直すたびに0か1のどちらかに偏ります。

どうしてでしょうか?

管理人

Re:GetNowCount()について

#2

投稿記事 by 管理人 » 17年前

GetNowCountは乱数じゃなく、PCが起動してからの経過ミリ秒です。
乱数を使う時はGetRandをお使い下さい。

JugS

Re:GetNowCount()について

#3

投稿記事 by JugS » 17年前

あ、そういえばGetRandがありましたね。
すっかり忘れてました。

ですが、上記のプログラムの

block[j] = GetNowCount()%2は,

起動してからのミリ秒を2で割ったあまりを代入しているのだから、
0か1が入ると思うのですが、
実行するとblock[0][0]~block[0][9]が、全て0か1に統一されてしまい、
block[1][0]以降には行かないのですが、
どうしてですか?

ibis

Re:GetNowCount()について

#4

投稿記事 by ibis » 17年前

その処理にかかる時間が1ミリ秒より短いからではないでしょうか?

バグ

Re:GetNowCount()について

#5

投稿記事 by バグ » 17年前

そうですね、1ミリ秒よりも短い時間で処理が終了してしまえば、全て同じ数値になりますね。
仮に…

block[j] = GetNowCount()%2

この処理の前か後に

Sleep(1);

これを足してみてください。
これで変化があると思います。

JugS

Re:GetNowCount()について

#6

投稿記事 by JugS » 17年前

指摘どおり、Sleep(1)をいれたらちゃんとばらけました。

いつもメインループ内で使っていたので、ループ処理の時間差を見落としてました。

ご指摘ありがとうございます。

閉鎖

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