Problème fonction rand()

Résolu
Messages postés
4
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
26 septembre 2006
-
Messages postés
4
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
26 septembre 2006
-
Bonjour à tous,
Je voudrais utiliser la fonction rand() en C, de façon à générer un nombre aléatoire.
Pour le moment mon code ressemble à ceci :

for(i=0; i<10; i++)
    {
        t[i]=rand();
    }

Si je compile avec gcc, tout se passe bien. Mais quand je passe sous visual studio 2005, il me dit "rand : identifier not found".

J'utilise les bibliothèques suivantes :
    - stdio.h
    - stdlib.h
    - iostream
    - stdafx.h
    - malloc.h

Je suis complètement coincé . J'espère que vous aurez une solution à m'apporter.

Bonne soirée

10 réponses

Messages postés
4
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
26 septembre 2006

J'ai posté le même message sur les newsgroup de Microsoft, et j'ai eu la réponse à mes problèmes :

"Dans cet ordre là?


stdafx.h n'est pas une librairie, mais le "precompiled header file",qui


permet d'accélérer la compilation en mettant dedans tous les headers "fixes"


de ton projet (comme windows.h).


Un effet de bord de ce mécanisme, c'est que tout ce qui se trouve dans tes


fichiers source avant l'#include de stdafx.h est ignoré. Dans ton cas,


stdio.h, stdlib.h (qui contient la déclaration de rand) et iostream sont


ignorés.


Mets juste le #include de stdafx.h en premier...


Ah, au fait, si tu veux une séquence vraiement pseudo-aléatoire, il faut


appeler une fois srand avant d'appeler rand (typiquement, on appelles


srand(time()) pour avoir un "seed" vraiement aléatoire).


Arnaud


MVP - VC










"
http://www.microsoft.com/france/communautes/...

Merci à tous pour votre aide
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
rand et srand sont inclue dans le fichier stdlib.h. Quelle version de VC++ 2005 as tu (Pro, Express, etc.)?

C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
Le plus important, as tu installer la PSDK? Ça pourrais peut-être expliquer l'abssence de rand.
C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
Messages postés
295
Date d'inscription
dimanche 4 mai 2003
Statut
Membre
Dernière intervention
6 décembre 2010

conio.h non?
Messages postés
4
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
26 septembre 2006

Bonjour,
conio.h n'arrange rien, le PSDK n'a rien changé non plus.

Merci quand même pour vos réponses.
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
10
Rajoute le prototype de la fonction rand dans ton fichier <stdlib.h>, c'est peut-être un peu bourrin, mais ça devrait marcher.

<hr size="2" width="100%" />Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
Messages postés
295
Date d'inscription
dimanche 4 mai 2003
Statut
Membre
Dernière intervention
6 décembre 2010

Fais une recherche du mot "rand" dans ton dossier d"includes.
Messages postés
4
Date d'inscription
dimanche 20 novembre 2005
Statut
Membre
Dernière intervention
26 septembre 2006

J'ai bien un fichier nommé rand.c dans mon dossier \Microsoft Visual Studio 8\VC\crt\src\
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
C'est pas supposé. Il DOIT être dans le fichier stdlib.h
Sinon, déclare le prototype directement dans ton fichier main.c comme suit:

int

__cdecl rand(
void);
et srand similairement:

void

__cdecl srand(
unsigned
int _Seed);

Ça devrais en théorie fonctionner.
C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
16
void __cdecl rand(void);



void __cdecl srand(unsigend int _Seed);

C'est plus claire insi.

Les fichiers que tu as trouvé à cette adresse \Microsoft Visual Studio 8\VC\crt\src\ ne sont que les sources même de rand pour le RunTime Micorsoft. Ce n'est, en pratique, pas nécessaire car rand est supposé être déjà présent.


C++ (@++)
___________________________________________
Les plus grands esprits trouvent toujours une solution<!--