前提・実現したいこと
人狼のシステムをC言語(C++などではなくただのC)で作りたい。
発生している問題・エラーメッセージ
役職決めでランダムな1~4の値をrandを使って各一回ずつ出したいのですが、srandを使うと同じ数が出てしまい、srandなしでは毎回同じ値になってしまいます。
該当のソースコード
c言語
1#include<stdio.h> 2#include<stdlib.h> 3#include<time.h> 4 5void Jinrou4(); 6void shuffle(); 7 8int main() 9{ 10 int n; 11 int role; 12 puts("プレイする人数を入力してください。(4~8)"); /*ここは無視してください*/ 13 scanf("%d",&n); 14 if(n==4) 15 { 16 Jinrou4(); 17 }else 18 { 19 puts("入力された値が正しくありません"); 20 21 } 22} 23 24void Jinrou4(int argc, char **argv) 25{ 26 int player; 27 puts("役職を決めます。"); 28 29 for ( int player = 0; player <= 3; player++) 30 { 31 32 printf("あなたはplayer%dです。\n",player+1); 33 puts("Enterを押してください。"); 34 int values[] = { 1, 2, 3, 4 }; 35 int size = sizeof(values) / sizeof(int); 36 shuffle(values, size); 37 if (values[player]==1) 38 { 39 puts("あなたは人狼です\n"); 40 41 }else if(values[player]==2||3) 42 { 43 puts("あなたは市民です\n"); 44 45 }else if(values[player]==4) 46 { 47 puts("あなたは占い師です\n"); 48 49 } 50 printf("確認したらENTERを押してください"); 51 if(getchar()=='\n'){ 52 printf("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); 53 } 54 55 } 56} 57 58void shuffle(int array[], int size) 59{ 60 srand((unsigned) time(NULL)); 61 int i = size; 62 while (i > 1) { 63 int j = rand() % i; 64 i--; 65 int t = array[i]; 66 array[i] = array[j]; 67 array[j] = t; 68 } 69}
試したこと
ネットで調べ、Jinrou4の関数にsrandを入れるなどしてみましたが上手くいきませんでした。
補足情報(FW/ツールのバージョンなど)
vscodeとコマンドプロンプトを使っています。
初めての質問なので至らない点はご容赦ください。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/29 12:17