Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    25

    [C] Generare un numero random con range

    Ciao a tutti
    vi chiedo gentilmente un consiglio riguardo al seguente problema che ho risontrato programmando in C:

    codice:
    for ( ..... ) {
      switch (pid = fork()) {
        case -1 : ....
        case 0 : int random = randomNumber(1, 10);
                     printf("random: %d\n", random);
                     exit(EXIT_SUCCESS);
        default: ......
      }
    }
    
    int randomNumber (int min, int max) {
      return min + (rand() % (int)(max - min + 1));
    }

    Non so per quale motivo, la variabile random rimane sempre la stessa per tutta la durata del ciclo for, anzichè generare un numero casuale ogni ciclo. Succede esclusivamente quando richiamo la funzione all'interno di una fork che a sua volta è all'interno di un ciclo. Ho provato semplicemente a richiamare la funzione all'interno del for e funziona...

    Qualcuno gentilmente sa per quale ragione e come faccio a by-passare il problema?

    Grazie mille di cuore!
    fede0693

  2. #2
    È normale, nel processo padre la rand() non viene mai chiamata, per cui lo stato interno del generatore di numeri casuali rimane fissato, e viene copiato (sempre uguale) in ciascun processo figlio. Per risolvere, aggiungi una rand() "a vuoto" dentro il for, in modo che anche nel processo padre l'RNG vada avanti e ciascun figlio parta così con un seed diverso.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2014
    Messaggi
    25
    ok perfetto, funziona!
    ti ringrazio moltissimo

    ps. sto sviluppando un progetto di Sistemi operativi. per l'università... C lo sto studiando e lo sto subendo contemporaneamente...è una lotta continua: io vs C , vedremo chi vince

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.