IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème avec rand


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2013
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Problème avec rand
    J'ai un problème assez bizarre.

    J'ouvre un fichier pour y compter le nombre de lignes. Ensuite j'utilise rand pour choisir une ligne aléatoire. Le problème dans tout cela, c'est que dès que j'utilise rand la variable contenant le nombre de lignes n'est plus incrémentée. Plus rien ne se passe, la boucle ne s'exécute plus. En revanche, si je commente la ligne la variable s'incrémente correctement.

    Je trouve ce problème mystérieux.

    Voici le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    do { 
                    if(buf[ i ] == 0x0A) 
                            nb_lignes++;
            } while(buf[ ++i ] != EOF);
     
            srand(time(NULL));
     
            printf("%d\n", nb_lignes);
     
            nb_ligne = rand() % nb_lignes;

  2. #2
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Pourrais-tu nous donner tous le programme (ou du moins une partie fonctionnelle qui reproduit le bug si le programme est trop long (>200 lignes)).

    Et sinon pourquoi utiliser un do-while, ça va segfaulter sur un fichier vide.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2013
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2013
    Messages : 24
    Points : 17
    Points
    17
    Par défaut
    Voici la fonction complète causant problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    void choisir_mot(char **mot) {
            unsigned int i=0, nb_ligne, nb_lignes=0;
            char *buf;
     
            read(open("mots_possibles", O_RDONLY, S_IRUSR), buf, MAX_BYTES);
     
            do {
                    if(buf[ i ] == 0x0A)
                            nb_lignes++;
            } while(buf[ ++i ] != EOF);
     
            srand(time(NULL));
     
            printf("%d\n", nb_lignes);
     
            nb_ligne = rand() % nb_lignes;
     
    /* Reste du code choisissant le mot et stockant un pointeur vers celui-ci dans **mot */
    }
    N'ayant pas fini d'écrire la fonction car j'attends de pouvoir comprendre le problème, je met en commentaire la suite logique du code.

    Le fichier que j'utilise reste toujours le même et il n'est jamais vide, il n'y a donc à priori pas de soucis avec ma boucle. Mais merci de m'avertir, je changerai cela.

    J'ai débuggué pour vérifier le fonctionnement. La boucle ne s'exécute pas, nb_lignes ne s'incrémente jamais.

  4. #4
    Membre expérimenté Avatar de Trademark
    Profil pro
    Inscrit en
    Février 2009
    Messages
    762
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 762
    Points : 1 396
    Points
    1 396
    Par défaut
    Je ne sais pas si tu as trop tronqué ton code mais plusieurs remarques générales :

    • buf n'est pas initialisé (besoin d'allocation via malloc)
    • Tu dois tester le retour des fonctions open et read car elles peuvent échouer.
    • Tu utilises "0x0A", pourquoi pas '\n', c'est plus simple à relire.


    Corrige ça et puis vois si tu as toujours des problèmes.

Discussions similaires

  1. Démineur : problème avec la fonction rand
    Par hazaki dans le forum Débuter
    Réponses: 3
    Dernier message: 10/12/2010, 21h24
  2. [MySQL] Problème avec Rand()
    Par Narutosaad dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 23/07/2010, 15h45
  3. Problème avec srand() et rand()
    Par rouliane dans le forum C++
    Réponses: 10
    Dernier message: 16/12/2007, 19h35
  4. Réponses: 7
    Dernier message: 05/05/2006, 09h48
  5. [Valeur aléatoire] Problème avec rand()
    Par Machjaghjolu dans le forum C++
    Réponses: 4
    Dernier message: 06/12/2005, 17h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo