Я слишком долго царапал себе голову. Я видел много тем о том, как получить случайное поколение в цикле С, однако я ничего не видел, когда задействованы две петли.Петля в петле и случайной генерации в c
Вот мой код ниже:
typedef struct
{
char qh_uid[6];
long int qh_vd;
long int qh_pd;
long int qh_id;
double qh_value;
}quote_history;
int records_size = 20;
int batch_size = 5;
char *rand_str(char *dst, int size)
{
static const char text[] = "abcdefghijklmnopqrstuvwxyz"
"ABCDEFGHIJKLMNOPQRSTUVWXYZ";
int i, len = size;
for (i = 0; i < len; ++i)
{
dst[i] = text[rand() % (sizeof text - 1)];
}
dst[i] = '\0';
return dst;
}
char *rand_tstp(char *dst, int size)
{
static const char text[] = "";
int i, len = size;
for (i = 0; i < len; ++i)
{
dst[i] = text[rand() % (sizeof text - 1)];
}
dst[i] = '\0';
return dst;
}
double randfrom(double min, double max)
{
double range = (max - min);
double div = RAND_MAX/range;
return min + (rand()/div);
}
quote_history *feed_batch(quote_history *qh_batch, int batchsize)
{
int j;
char mytext[6];
char mylong[17];
for (j = 0; j < batchsize; ++j)
{
quote_history qh_aux;
printf("uid : %s - value : %lf\n",rand_str(mytext, sizeof mytext), randfrom(0,100000));
strcpy(qh_aux.qh_uid, rand_str(mytext, sizeof mytext));
qh_aux.qh_vd = strtol(rand_tstp(mylong, sizeof mylong), NULL, 10);
qh_aux.qh_pd = strtol(rand_tstp(mylong, sizeof mylong), NULL, 10);
qh_aux.qh_id = strtol(rand_tstp(mylong, sizeof mylong), NULL, 10);
qh_aux.qh_value = randfrom(0,100000);
qh_batch[j] = qh_aux;
}
printf("--------------\n");
return qh_batch;
}
int
main(int const argc,
const char ** const argv) {
quote_history *subArray;
srand(time(NULL));
int k;
for (k = 0; k < (int)(records_size/batch_size); ++k) {
subArray= (quote_history*)calloc(batch_size, sizeof(quote_history));
subArray = feed_batch(subArray, batch_size);
// Do something with subArray
free(subArray);
}
}
Ну, в принципе, то, что я хочу сделать, это генерировать партию (как массив) STRUCT quote_history где есть случайная генерация на некоторых значениях, то лечить пакет и перейти к другому.
По какой-то причине случайное поколение хорошо работает в функции feed_batch, но когда оно переходит к следующему элементу в цикле, партия остается неизменной и всегда.
Забыл вставить результат кода:
uid : qJfzrJ - value : 64938.995598
uid : LyCadK - value : 23030.096583
uid : dcOicU - value : 26016.211568
uid : BmpSTV - value : 76145.000279
uid : aQvABq - value : 92286.726130
--------------
uid : qJfzrJ - value : 64938.995598
uid : LyCadK - value : 23030.096583
uid : dcOicU - value : 26016.211568
uid : BmpSTV - value : 76145.000279
uid : aQvABq - value : 92286.726130
--------------
uid : qJfzrJ - value : 64938.995598
uid : LyCadK - value : 23030.096583
uid : dcOicU - value : 26016.211568
uid : BmpSTV - value : 76145.000279
uid : aQvABq - value : 92286.726130
--------------
uid : qJfzrJ - value : 64938.995598
uid : LyCadK - value : 23030.096583
uid : dcOicU - value : 26016.211568
uid : BmpSTV - value : 76145.000279
uid : aQvABq - value : 92286.726130
--------------
Я пробовал много комбинаций (цикл в цикле вместо функции feed_batch, например), но безуспешно.
Я надеюсь, что кто-то поможет мне в этом.
Florian
Это не ваш полный код - нет определения 'qh_aux', например. –
Это не компилируется. Что такое qh_aux? – rectummelancolique
Терминатор '' \ 0'', написанный 'rand_str', выходит за рамки массива' mytext' так, как вы вызываете функцию. Быть осторожен ! –