質問: 5) printf("凶\n"); else printf("大凶\n"); printf("乱数は %d です。\n", num); //乱数値テスト用 return 0; } ### 試したこと 色々調べてみましたが、何故か乱数を7で割った場合のみその後も固定されてしまいます。 ### 補足情報(言語/FW/ツール等のバージョンなど) 言語 C FW Mac OSX Yosemite
回答: MacOSX 10.11.4, xcode 7.3 で同じ現象を確認しました。 time(null) "c" srand 7 で google 検索してみました。 参考情報: * Mac、iOSで、rand()関数の疑似乱数アルゴリズムがヘン! * c言語での乱数生成 > > ... > > 擬似乱数発生のアルゴリズムに欠陥がある > > ... > > どうもMac+Xcode特有の問題のようです。 > > ... > > > * Why does rand() % 7 always return 0? 乱数表の冒頭は捨てるのがよさそうです。 修正例: ``` #include #include #include int main(void) { int num; srand(time(NULL)); // 最初の乱数を捨てる for (int i = 0; i < 10; i++) { rand(); } num = rand() % 7; printf("おみくじをします。\n"); if(num == 0) printf("大吉\n"); else if(num == 1) printf("中吉\n"); else if(num == 2) printf("小吉\n"); else if(num == 3) printf("吉\n"); else if(num == 4) printf("末吉\n"); else if(num == 5) printf("凶\n"); else printf("大凶\n"); printf("乱数は %d です。\n", num); //乱数値テスト用 return 0; } ``` こうすると、毎回、異なる結果が得られました。