Member 13013165 Ответов: 2

Почему следующий код терпит неудачу?


Мне интересно, почему следующий код терпит неудачу. Я думал, что он будет генерировать новое число каждый раз, когда вызывается функция random (), хотя и рекурсивно. Но кажется, что число остается неподвижным в течение довольно долгого времени, прежде чем измениться. Почему это так? И как я могу изменить его так, чтобы каждый раз, когда он вызывается, генерировался новый номер?

Большое спасибо!

Что я уже пробовал:

#include <time.h>
#include <stdio.h>

int i=0;
int random();

int main(){
    random();
    return 0;
}

int random(){
    int a;
    i+=1;
    srand(time(NULL));
    a=rand()%20;
    printf("This is the %d th iteration\n",i);
    printf("random number generated is: %d\n",a);
    if(a<8)
        random();
}

Afzaal Ahmad Zeeshan

Вам нужно изучить основы случайного в языках программирования. Случайные числа, сгенерированные, не являются случайными. В них есть какая-то закономерность.

Подробнее читайте в Гугле. Я не буду отвечать. Чтобы вы сами могли этому научиться.

2 Ответов

Рейтинг:
19

Graeme_Grant

Google - ваш друг ... вам нужно провести некоторые исследования и научиться правильно использовать функцию rand... c количество Рэнд [^]

Из приведенного выше поиска google: Библиотечная функция C - rand()[^]

#include <stdio.h>
#include <stdlib.h>

int main()
{
   int i, n;
   time_t t;
   
   n = 5;
   
   /* Intializes random number generator */
   srand((unsigned) time(&t));

   /* Print 5 random numbers from 0 to 19 */
   for( i = 0 ; i < n ; i++ ) 
   {
      printf("%d\n", rand() % 20);
   }
   
   return(0);
}


Member 13013165

Здравствуйте, спасибо, что указали мне на google. Сначала я постараюсь найти решение (которое я пробовал ранее, но, вероятно, следуя комментариям из Stack Overflow, это не лучший источник для понимания проблемы). В качестве примечания я должен сказать,что я совершенно обескуражен переполнением стека. Я задал 2 вопроса, и мне запретили задавать еще какие-либо вопросы. Я надеюсь, что буду чувствовать себя более ободренным, задавая вопросы здесь. Спасибо.

Рейтинг:
1

Patrice T

пробовать

#include <time.h>
#include <stdio.h>

int i=0;
int random();

int main(){
    srand(time(NULL));
    random();
    return 0;
}

int random(){
    int a;
    i+=1;
    a=rand()%20;
    printf("This is the %d th iteration\n",i);
    printf("random number generated is: %d\n",a);
    if(a<8)
        random();
}

Проблема заключается в srand(). генератор случайных чисел не является случайным, он псевдослучайный, это означает, что если вы установите семя 2 раза с одним и тем же значением, вы получите одну и ту же "случайную" последовательность. А так как ваше семя-это число секунд, то вы получаете каждый раз одну и ту же последовательность.