実現したいこと
cで乱数が変化するようにしたい
前提
ここに質問の内容を詳しく書いてください。
(例)
3つのx,y座標をもった構造体のリストを作成するプログラムを書いています。
リストの要素は5です。
3つの座標をランダムに発生させたいのですが
三角形のアドレス:7673392
0:x=404.470870 y=381.138218
1:x=404.470870 y=381.138218
2:x=404.470870 y=381.138218
三角形のアドレス:7673584
0:x=510.618854 y=10.476547
1:x=510.618854 y=10.476547
2:x=510.618854 y=10.476547
というように要素ごとには違う値が入っているのですが座標ごとには同じ値が入っています。
srand((unsigned int)time(NULL));
の挿入位置の問題とはわかっているのですが様々な場所に変更したり増やしたりしても改善されなかったのでご助言頂きたいです。
該当のソースコード
c
1#include<stdio.h> 2#include<string.h> 3#include<stdlib.h> 4#include <ctype.h> 5#include<conio.h> 6#include<math.h> 7#include <time.h> 8#include <unistd.h> 9#define N_MIN 3 10#define N_MAX 100 11#define ZAHYO_MIN 55.0 12#define ZAHYO_MAX 550.0 13 14struct zahyo{ 15 double x; 16 double y; 17}; 18typedef struct zahyo Coordinate; 19 20 21struct sankaku{ 22 Coordinate v[3]; 23 struct sankaku *next; 24}; 25typedef struct sankaku Triangle; 26 27Triangle *node_malloc(Triangle *random,int n,int i){ 28 Triangle *a = (Triangle*)malloc(sizeof(Triangle)); 29 a = random; 30 31 for(int b=0; b<3;b++){ 32 a->v[b].x=(double) fmod(rand(),(ZAHYO_MAX - ZAHYO_MIN + 1.0) + ZAHYO_MIN) + (double)rand()/RAND_MAX; 33 a->v[b].y=(double) fmod(rand(),(ZAHYO_MAX - ZAHYO_MIN + 1.0) + ZAHYO_MIN) + (double)rand()/RAND_MAX; 34 } 35 36 if(n>i){ 37 Triangle *b = (Triangle*)malloc(sizeof(Triangle)); 38 a->next=b; 39 a->next=node_malloc(a->next,n,i+1); 40 } 41 42 return a; 43 44} 45 46int main(){ 47 int i=1; 48 int n=5; 49 srand((unsigned int)time(NULL)); 50 Triangle *sankaku; 51 52 sankaku = (Triangle*)malloc(sizeof(Triangle));//領域の確保 53 sankaku=node_malloc(sankaku,n,i); 54 55 while(sankaku->next!=NULL){ 56 printf("三角形のアドレス:%d\n",sankaku); 57 for(int j=0; j<3; j++){ 58 printf("%d:x=%f y=%f\n",j,sankaku->v[i].x,sankaku->v[i].y); 59 } 60 puts("\n"); 61 sankaku=sankaku->next; 62 } 63 return 0; 64 65} 66
試したこと
srand((unsigned int)time(NULL));
を31行目の次に挿入したがむしろ全ての座標が同じ乱数になった
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/05/21 08:29