Problème fonction rand()

Résolu
Copyright83 Messages postés 4 Date d'inscription dimanche 20 novembre 2005 Statut Membre Dernière intervention 26 septembre 2006 - 21 sept. 2006 à 21:12
Copyright83 Messages postés 4 Date d'inscription dimanche 20 novembre 2005 Statut Membre Dernière intervention 26 septembre 2006 - 26 sept. 2006 à 00:54
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

Copyright83 Messages postés 4 Date d'inscription dimanche 20 novembre 2005 Statut Membre Dernière intervention 26 septembre 2006
26 sept. 2006 à 00:54
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
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 sept. 2006 à 23:56
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<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
21 sept. 2006 à 23:58
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<!--
0
niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010
22 sept. 2006 à 11:36
conio.h non?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Copyright83 Messages postés 4 Date d'inscription dimanche 20 novembre 2005 Statut Membre Dernière intervention 26 septembre 2006
23 sept. 2006 à 10:07
Bonjour,
conio.h n'arrange rien, le PSDK n'a rien changé non plus.

Merci quand même pour vos réponses.
0
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
23 sept. 2006 à 10:54
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.
0
niketou Messages postés 295 Date d'inscription dimanche 4 mai 2003 Statut Membre Dernière intervention 6 décembre 2010
23 sept. 2006 à 14:43
Fais une recherche du mot "rand" dans ton dossier d"includes.
0
Copyright83 Messages postés 4 Date d'inscription dimanche 20 novembre 2005 Statut Membre Dernière intervention 26 septembre 2006
23 sept. 2006 à 15:20
J'ai bien un fichier nommé rand.c dans mon dossier \Microsoft Visual Studio 8\VC\crt\src\
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
23 sept. 2006 à 16:39
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<!--
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
23 sept. 2006 à 16:45
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<!--
0
Rejoignez-nous