question bete : probleme dans la déclaration d'un tableau

question bete : probleme dans la déclaration d'un tableau - C++ - Programmation

Marsh Posté le 13-12-2002 à 21:36:13    

bonjour
 
je débute en C (je connais bien le php mais niveau déclarations de variables c'est pas ca :D) et j'ai un probleme dans la déclaration d'un tableau qui est sensé avoir une taille rentrée par les soins de l'utilisateur du programme. Voici mon code source :
 
 

Code :
  1. #include <stdio.h>
  2. /*fin des include*/
  3. int main(void)
  4. {
  5.   int nbcouches,i;
  6.   printf ("nombre de couches du réseau (sans compter la première) ? " );
  7.   scanf("%d",&nbcouches);
  8.  
  9.   int couche[nbcouches]; // ligne 11
  10.   for (i=0;i<nbcouches;i++) printf (i);
  11.    return 0;
  12. }

 
 
erreurs :

config.c: In function `main':
config.c:11: parse error before `int'
config.c:12: warning: passing arg 1 of `printf' makes pointer from integer without a cast


 
quelqu'un peut m'aider ?

Reply

Marsh Posté le 13-12-2002 à 21:36:13   

Reply

Marsh Posté le 13-12-2002 à 21:40:22    

printf("%d ", i);
 
le reste du code est correct en C99, mais tu devrais préféré l'allocation dynamique avec malloc. quel est ton compilateur?


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 13-12-2002 à 21:44:02    

j'ai modifié mon print (i) avec ce que tu m'as dit.
ca m'affiche toujours
 
 


config.c: In function `main':
config.c:11: parse error before `int'

 
 
(enfin ca fait deja une erreur de résolue ;))
l'autre erreur vient du tableau non ?
 
 
j'utilise gcc, mais je sais pas a quoi sert malloc.

Reply

Marsh Posté le 13-12-2002 à 21:51:13    

quelle version de gcc? (gcc --version)


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 13-12-2002 à 21:52:49    

2.96

Reply

Marsh Posté le 13-12-2002 à 21:56:26    

ben t'as 3 solution: soit tu mets à jour ton compilateur, soit tu cherches un cours sur les allocations dynamiques en C (site ou livre), soit t'attend qu'une bonne ame ou moi meme t'explique (mais la tu risque peut etre d'attendre indéfiniment  :D )


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 13-12-2002 à 21:57:47    

Taz@PPC a écrit :

ben t'as 3 solution: soit tu mets à jour ton compilateur, soit tu cherches un cours sur les allocations dynamiques en C (site ou livre), soit t'attend qu'une bonne ame ou moi meme t'explique (mais la tu risque peut etre d'attendre indéfiniment  :D )


 
c'est si compliqué de définir un tableau avec une variable comme nombre de cellules ? :??:

Reply

Marsh Posté le 13-12-2002 à 22:03:47    

Library a écrit :


 
c'est si compliqué de définir un tableau avec une variable comme nombre de cellules ? :??:

non, mais tu est tres debutant. tu as deja entendu parlé des pointeurs :dawa: ! ton code est correct mais est fait partie de la derière révision du C (norme C99): ca fonctionne mais dans toncas il vaut meiux préférer l'allocation dynamique (taille inconnue à la compilation)
 
petit exemple:
 

Code :
  1. type *tab;
  2. unsigned size;
  3. scanf("%u", &size);
  4. // allocation dynamique
  5. tab=malloc(size * sizeof(type)); // ou size * sizeof *tab;
  6. // utlisation comme pour un tableau tab[i]
  7. //desallocation : obligatoire sinon fuite mémoire
  8. free(tab);


Message édité par Taz@PPC le 13-12-2002 à 22:05:06

---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 13-12-2002 à 22:11:58    

Taz@PPC a écrit :

non, mais tu est tres debutant. tu as deja entendu parlé des pointeurs :dawa: ! ton code est correct mais est fait partie de la derière révision du C (norme C99): ca fonctionne mais dans toncas il vaut meiux préférer l'allocation dynamique (taille inconnue à la compilation)
 
petit exemple:
 

Code :
  1. type *tab;
  2. unsigned size;
  3. scanf("%u", &size);
  4. // allocation dynamique
  5. tab=malloc(size * sizeof(type)); // ou size * sizeof *tab;
  6. // utlisation comme pour un tableau tab[i]
  7. //desallocation : obligatoire sinon fuite mémoire
  8. free(tab);




 
j'avais deja essayé de programmer en C y a qq temps, je m'étais heurté au probleme des pointeurs. Apres un peu de lecture, j'avais rien compris :D
je vais essayer de m'informer plus sur ce que c'est, mais en attendant, si je me sers de ton code est ce que tab est un tableau "normal" avec le nombre de cellules que je veux ?

Reply

Marsh Posté le 13-12-2002 à 22:17:48    

oui. fais un test et si tu as des problèmes ou que tu hesites, poste ton code (au fait pour malloc il faut inclure <stdlib.h> ou <malloc.h> (stdlib inclus lui meme malloc))


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 13-12-2002 à 22:17:48   

Reply

Marsh Posté le 13-12-2002 à 22:31:36    

j'ai encore plein d'erreurs :(
 
voici mon code :
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /*fin des include*/
  4. int main(void)
  5. {
  6.   int nbcouches,i;
  7.   printf ("nombre de couches du réseau (sans compter la première) ? " );
  8.   scanf("%d",&nbcouches);
  9.  
  10.   type *tab;
  11.   unsigned size;
  12.    scanf("%u", &size);
  13.    // allocation dynamique
  14.    tab=malloc(size * sizeof(type));// ou size * sizeof *tab;
  15.    // utlisation comme pour un tableau tab[i]
  16.  
  17.    //desallocation : obligatoire sinon fuite mémoire
  18.   free(tab);
  19.   /*int couche[nbcouches];*/
  20.   /*for (i=0;i<nbcouches;i++) printf ("%d ",i);*/
  21.    return 0;
  22. }

 
 
 
et les erreurs :
 

config.c: In function `main':
config.c:12: `type' undeclared (first use in this function)
config.c:12: (Each undeclared identifier is reported only once
config.c:12: for each function it appears in.)
config.c:12: `tab' undeclared (first use in this function)
config.c:12: warning: statement with no effect
config.c:13: parse error before `unsigned'
config.c:14: `size' undeclared (first use in this function)
config.c:15: parse error before `/'
config.c:8: warning: unused variable `i'

 
 
faut que je déclare des variables ?

Reply

Marsh Posté le 13-12-2002 à 22:45:34    

euh type ct pour dire la manière générique. si tu veux un tableau d'int, type, c'est int. adapte le code  :lol:


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 13-12-2002 à 23:00:28    

je savais pas ;)
je fais ca alors :D

Reply

Marsh Posté le 14-12-2002 à 20:50:47    

c'est bon ca ca marche :)
merci :)
 
maintenant j'ai un autre probleme, cette fois pour afficher un texte. Il n'y a pas d'erreur lors de la compilation, mais le printf me revoie "Erreur de segmentation". Faut faire quoi pour que ca marche ?
 
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /*fin des include*/
  4. int main(void)
  5. {
  6.   int nbcouches,i;
  7.   float eta;
  8.   int *couche;
  9.   char *fichier;
  10.  
  11.   printf ("Nom du fichier d'exemples : " );
  12.   scanf("%s",fichier);
  13.  
  14.   printf ("%s ",fichier);
  15.    return 0;
  16. }

Reply

Marsh Posté le 14-12-2002 à 21:02:58    

Library a écrit :

c'est bon ca ca marche :)
merci :)
 
maintenant j'ai un autre probleme, cette fois pour afficher un texte. Il n'y a pas d'erreur lors de la compilation, mais le printf me revoie "Erreur de segmentation". Faut faire quoi pour que ca marche ?
 
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. /*fin des include*/
  4. int main(void)
  5. {
  6.   int nbcouches,i;
  7.   float eta;
  8.   int *couche;
  9.   char *fichier;
  10.  
  11.   printf ("Nom du fichier d'exemples : " );
  12.   scanf("%s",fichier);
  13.  
  14.   printf ("%s ",fichier);
  15.    return 0;
  16. }

 


Il faut allouer de la mémoire à ton tableau avant d'écrire dedans. Là, fichier est juste nu pointeur, avec rien derrière, c'est même bizarre que le scanf passe.
->AVANT toute utilisation de ton tableau,il faut allouer la mémoire (malloc)
->APRES la dernière utilisation de ton tableau il faut libérer la mémoire (free)

Reply

Marsh Posté le 14-12-2002 à 21:09:13    

merci, ca marche :)
en plus je crois que je commence a comprendre les pointeurs :D

Reply

Marsh Posté le 15-12-2002 à 00:24:31    

Library a écrit :

merci, ca marche :)
en plus je crois que je commence a comprendre les pointeurs :D

:hello:  :D la route est encore longue j'ai bien peur


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-12-2002 à 04:13:57    

Code :
  1. int (*(*pfpai)())[N];


---------------
Bricocheap: Montage de ventilo sur paté de mastic silicone
Reply

Marsh Posté le 15-12-2002 à 11:14:28    

Taz@PPC a écrit :

:hello:  :D la route est encore longue j'ai bien peur


 
oui ca j'en suis sur :D
 
d'ailleurs j'ai un autre probleme  :whistle:  
 
je veux concaténer des chaines de caracteres. J'ai vu qu'il fallait se servir de strcat. Mais comment faire pour concatener une chaine de caracteres avec un entier ou un float ?
j'ai essayé de changer le type de l'int en char mais j'ai pas réussi.
comment faire ?

Reply

Marsh Posté le 15-12-2002 à 11:48:30    

avec sprintf. tu veux pas t'acheter un livre sur le C (comme le Kernighan & Richie) ou installer linux histoire d'avoir les man sont la main, sachant qu'il n'existe pas à ma connaissance de tutoriel valable pour apprendre le C sur le net. si tu as des problèmes, on va t'aider, mais si il faut qu'on te decrive tout la bibliothèque standard, ca risque de prendre du temps, et pour nous, et pour toi.


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-12-2002 à 12:00:59    

je suis sous linux (mais je sais pas encore trop m'en servir). Faut taper quoi pour avoir les aides ? (man je sais, mais quoi apres ?)
 
oui faudra surement que je m'achete un bouquin, mais la j'en ai pas sous la main.
j'ai essayé de trouver sur le net et c'est vrai qu'il y a pas grand chose.

Reply

Marsh Posté le 15-12-2002 à 12:09:09    

man <nom_de_la_fonction>
 
 
man printf
man sprintf
man pow
etc...
 
si tu ne trouves pas essaye "man -a <fonction>" ou "apropos <fonction>"


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-12-2002 à 16:47:44    

man -k plutot, non ?

Reply

Marsh Posté le 15-12-2002 à 16:51:07    

-k     Equivalent to apropos.
 
-a     By default, man  will  exit  after  displaying  the first  manual  page  it  finds.   Using this option forces man to display all  the  manual  pages  that match name, not just the first.



---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-12-2002 à 17:58:16    

en tous cas ca marche :)
merci... et a la prochaine erreur :D

Reply

Marsh Posté le 15-12-2002 à 20:00:06    

elle a pas tardé a venir :D
enfin c'est pas une erreur, mais je sais pas du tout comment programmer ce que je veux :
 
je veux un tableau de chaines de caracteres, i.e. dans chaque contenu[i] il y aura une chaine de caracteres. Je pense que c'est un tableau de caracteres contenu[i][j] mais je sais pas trop comment le faire.
 
a mon avis c'est un  
char **contenu;
 
mais apres je met quoi dans les sizeof du malloc ?
je met  
*contenu=malloc(nombre*sizeof(int));
contenu=malloc(25*sizeof(char));
?
(sachant que mes chaines de caracteres font environ 25 caracteres)
 
merci :)

Reply

Marsh Posté le 15-12-2002 à 20:06:30    

sizeof(char) == 1 par définition.
 
si tu connais la taille des tes chaines, pas besoin de malloc a priori
 

Code :
  1. char **contenu;
  2. contenu=malloc(n_string * sizeof(char *));
  3. for(i=0; i<n_string; ++i)
  4. {
  5.   contenu[i]=malloc(taille_string);
  6. }
  7. // et boucle analogue pour la désallocation, puis free(contenu)


Message édité par Taz@PPC le 15-12-2002 à 20:06:42

---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-12-2002 à 21:06:18    

il vaut mieux "caster" explicitement le malloc
 

Code :
  1. pint = (type *)malloc(N*sizeof(type));


 
avec "type" le type de données (char, int, ....) sinon sous certains OS (sur nos serveurs HP par exemple) y'a des warnings à la con à la compilation.
 
Et n'oubliez pas le  
 

Code :
  1. if pint==NULL
  2. {
  3.    printf("Erreur de malloc" );
  4.    exit(-1);
  5. }


 
Pour être sûr qu'il n'y a pas eu d'erreurs d'allocation

Reply

Marsh Posté le 15-12-2002 à 21:11:00    

non, il vaut mieux pas. retourne au delphi [:dawa]


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-12-2002 à 21:15:13    

merci, ca marche bien :)
 
enfin j'ai tjs un probleme  :ange:  
j'essaie de "mélanger" mon tableau de chaines de caracteres.
 

Code :
  1. char tmp[25];
  2. char **contenu;
  3.   contenu=malloc(nombre*sizeof(char *));
  4.   for (i=0;i<nombre;i++)
  5.     {
  6.       contenu[i]=malloc(25);
  7.     }
  8. for (i=0;i<nombre;i++)
  9. {
  10. e=floor(100*drand48());
  11. f=floor(100*drand48());
  12. /*printf ("%s",contenu[e]);*/
  13. tmp=contenu[e]; /* ligne 77 */
  14. contenu[e]=contenu[f];
  15. contenu[f]=tmp;
  16. }

 
 
ca me met "donnees.c:77: incompatible types in assignment"
 

Reply

Marsh Posté le 15-12-2002 à 21:42:46    

donne un morceau de code plus complet et expliques ce que tu veux faire.
tu melanges tableau et pointeur.
tmp est un tableau de char et ne peut pas etre modifié (son contenu si) et e est un type flottant: c'est absolument incompatible. il faut deja absolument que e et f soit des entiers positifs et que leur index soit valide. ensuite si tu veux permuter ces éléments, le plus simple ce n'est pas de tenter de recopier le tableau (ce que tu voudrais bien faire), mais de permuter les pointeur. tmp doit donc etre un char*
 
 
 
commande un livre pour nowel.
 
du bon usage du générateur de nombres pseudo-aléatoire (drand48() n'est pas standard, mais ca vaut pour lui aussi)
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h> /* pour srand, rand et RAND_MAX */
  3. #include <time.h> /* pour time */
  4. unsigned myrand1(unsigned N)
  5. {
  6.   /**
  7.    * les bits de poids faibles ont une dsitribution tres peu alétoire
  8.    * d'ou des sequences 0 1 0 1 0 1 0 1 0
  9.    * ce n'est donc pas une bonne methode
  10.    */
  11.   return (unsigned)rand()%N;
  12. }
  13. unsigned myrand2(unsigned N)
  14. {
  15.   /**
  16.    * beaucoup plus aléatoire
  17.    * (la je te fais pas l'explication)
  18.    */
  19.   return (unsigned)((double)rand()/((double)RAND_MAX+1)*N);
  20. }
  21. int main()
  22. {
  23.   /**
  24.    * initialisation du générateur de nombres pseudos-aleatoires
  25.    * on iutilise généralement le temps courant (nombre de secondes ecoulees
  26.    * depuis 01/01/1970
  27.    * srand => seed == 'graine'
  28.    */
  29.   srand(time(NULL));
  30.   unsigned n;
  31.   scanf("%u", &n);
  32.   int i;
  33.   for(i=0; i<10; ++i)
  34.     {
  35.       printf("%u\t%u\n", myrand1(n), myrand2(n));
  36.     }
  37.   return EXIT_SUCCESS;
  38. }


Message édité par Taz@PPC le 15-12-2002 à 21:46:39

---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-12-2002 à 21:53:58    

Taz@PPC a écrit :

donne un morceau de code plus complet et expliques ce que tu veux faire.
tu melanges tableau et pointeur.
tmp est un tableau de char et ne peut pas etre modifié (son contenu si) et e est un type flottant: c'est absolument incompatible. il faut deja absolument que e et f soit des entiers positifs et que leur index soit valide. ensuite si tu veux permuter ces éléments, le plus simple ce n'est pas de tenter de recopier le tableau (ce que tu voudrais bien faire), mais de permuter les pointeur. tmp doit donc etre un char*
 
 
 
commande un livre pour nowel.
 
du bon usage du générateur de nombres pseudo-aléatoire (drand48() n'est pas standard, mais ca vaut pour lui aussi)
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h> /* pour srand, rand et RAND_MAX */
  3. #include <time.h> /* pour time */
  4. unsigned myrand1(unsigned N)
  5. {
  6.   /**
  7.    * les bits de poids faibles ont une dsitribution tres peu alétoire
  8.    * d'ou des sequences 0 1 0 1 0 1 0 1 0
  9.    * ce n'est donc pas une bonne methode
  10.    */
  11.   return (unsigned)rand()%N;
  12. }
  13. unsigned myrand2(unsigned N)
  14. {
  15.   /**
  16.    * beaucoup plus aléatoire
  17.    * (la je te fais pas l'explication)
  18.    */
  19.   return (unsigned)((double)rand()/((double)RAND_MAX+1)*N);
  20. }
  21. int main()
  22. {
  23.   /**
  24.    * initialisation du générateur de nombres pseudos-aleatoires
  25.    * on iutilise généralement le temps courant (nombre de secondes ecoulees
  26.    * depuis 01/01/1970
  27.    * srand => seed == 'graine'
  28.    */
  29.   srand(time(NULL));
  30.   unsigned n;
  31.   scanf("%u", &n);
  32.   int i;
  33.   for(i=0; i<10; ++i)
  34.     {
  35.       printf("%u\t%u\n", myrand1(n), myrand2(n));
  36.     }
  37.   return EXIT_SUCCESS;
  38. }




 
ce que je veux faire c'est échanger les contenus de contenu[e] et contenu[f]. Pour cela, il faut que je passe pas une variable intermédiaire. Comme contenu[e] et contenu[f] sont des chaines de caracteres, il faut donc que tmp soit une chaine de caracteres non ?
e et f sont des entiers positifs je pense (floor d'un nombre flottant positif)

Reply

Marsh Posté le 15-12-2002 à 22:08:05    

merci de m'avoir cité en entier  ;)  
 
 
contenu[e] et contenu[f] ne sont pas des chaines de caractères, mais des pointeurs vers des zones contigues de bits pouvant etre interprétées comme une chaine de caractère. permute les pointeurs et c'est gagné. les contenus pointés ne sont pas déplacés, seuls les pointeurs qui les référence sont permutés.
 
et assure toi plus sérieusement de la validité de e et f qui doivent etre de type entier (pas flottant) et j'ai bien dit type, et d'index valide [0 , n[


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-12-2002 à 22:24:14    

en mettant char * tmp, ca ne met plus d'erreur :)
j'ai déclaré e et f comme entiers, il m'aurait mis une erreur si j'avais voulu mettre un float dedans non ?
et je crois que drand48() renvoie un float entre 0 et 1. Comme je le multiplie par le nombre d'éléments de mon tableau ca devrait rouler

Reply

Marsh Posté le 15-12-2002 à 22:30:31    

regarde le code que j'ai egalement posté qui renvoie pardéfaut un entier positif ou nul et qui a pour lui d'etre standard


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-12-2002 à 22:35:58    

au temps pour moi, je m'étais planté dans mon code : le 100 c'est en fait nombre (mais comme au début je testais que pour nombre=100, j'ai mis 100 sans faire expres)
 
sinon faut que je change mon rand, drand48() ne me donne pas de bons résultats (bcp de valeurs proches de 9). C'est normal ca ?
ton code donne de bons résultats ?

Reply

Marsh Posté le 15-12-2002 à 22:38:58    

Library a écrit :

au temps pour moi, je m'étais planté dans mon code : le 100 c'est en fait nombre (mais comme au début je testais que pour nombre=100, j'ai mis 100 sans faire expres)
 
sinon faut que je change mon rand, drand48() ne me donne pas de bons résultats (bcp de valeurs proches de 9). C'est normal ca ?
ton code donne de bons résultats ?

:heink: il marche impeccablement mais peut etre l'utilsie mal. tu as bien mis le srand(time(NULL)) ? montre ton code complet modifié


---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le 15-12-2002 à 22:42:36    

nan en fait c'est bon. c'est du à une sélection de valeurs que j'ai faite qui a pour effet de garder autant de "grandes" valeurs que de valeurs "moins grandes"
donc ca me garde bcp de 9.
 
j'ai vérifié sur 10000 rand, ca fait une moyenne de 0.497895, c'est pas mal ;)
 
encore merci pour ton aide :)
je vais arreter pour ce soir :D

Reply

Marsh Posté le 16-12-2002 à 21:51:19    

J'ai un probleme pour déclarer un tableau en variable globale :
mon tableau global qui marche pas c'est *couche (enfin c'est encore un pointeur au moment ou je le déclare)
je commence par récuperer des valeurs dans un fichier (fonction config). Ensuite, dans la fonction main je défini mon tableau couche a partir des donnees que j'ai récupéré.
mon probleme est que lorsque je met "printf("%d",couche[0]);" dans ma fonction main ca me met "Errreur de segmentation" (alors que lorsque je met la meme ligne dans la fonction config ca m'affiche ce qu'il faut.
 
comment faire ?
 
 
mon code :

Code :
  1. #include <time.h>
  2. #include <math.h>
  3. /*fin des include*/
  4. float * w;
  5. int nbcouches,moyennisation,recup_poids,verif_appr,nbpresentations,fonction_cachee,fonction_sortie;
  6. int *couche;
  7. float eta;
  8. char fichier_exemples[20],fichier_verif[20];
  9. double drand48(void);
  10. void srand48 (long int seed);
  11. int main(void)
  12. {
  13.   /*fonction de recuperation des donnees du fichier de configuration du reseau*/
  14.   void config (char fichier[20]);
  15.  
  16.   char fichier[20];
  17.   int max,i;
  18.  
  19.   /*max=couche[0];
  20.   for (i=0;i<=nbcouches;i++)  
  21.     {
  22.       if (couche[i]>max) max=couche[i];
  23.       }*/
  24.   /*printf("%d",couche[0]);  */
  25.     /* w=malloc(nbcouches*max*max*sizeof(float));*/
  26.   /* w[c][i][j]=w[c*max*max+i*max+j] est le poids de la connexion allant entre  
  27. le neurone i de la couche c-1 au neurone j de la couche c*/
  28.  
  29.   printf ("Nom du fichier de config : " );
  30.   scanf("%s",fichier);
  31.   config(fichier);
  32.   free(couche);
  33. return 0;
  34. }
  35. void config (char fichier[20])
  36. {
  37.   FILE *id_fichier;
  38.   int i;
  39.  
  40.   id_fichier=fopen(fichier,"r" );
  41.   fscanf(id_fichier,"%d",&nbcouches);
  42.   couche=malloc((nbcouches+1)*sizeof(int));
  43.   for (i=0;i<nbcouches;i++)
  44.     {
  45.       if (fscanf(id_fichier,"%d;",&couche[i])!=1) printf ("Erreur de lecture" );
  46.     }
  47.   fscanf(id_fichier,"%d",&couche[nbcouches]);
  48.   fscanf(id_fichier,"%f",&eta);
  49.   fscanf(id_fichier,"%s",fichier_exemples);
  50.   fscanf(id_fichier,"%s",fichier_verif);
  51.   fscanf(id_fichier,"%d",&moyennisation);
  52.   fscanf(id_fichier,"%d",&recup_poids);
  53.   fscanf(id_fichier,"%d",&verif_appr);
  54.   fscanf(id_fichier,"%d",&nbpresentations);
  55.   fscanf(id_fichier,"%d",&fonction_cachee);
  56.   fscanf(id_fichier,"%d",&fonction_sortie);
  57.  
  58.   fclose(id_fichier);
  59.  
  60.   /*printf("%d\n",nbcouches);
  61.   for (i=0;i<=nbcouches;i++) printf("%d;",couche[i]);
  62.   printf("\n%s\n%s\n%d\n%d\n%d\n%d\n%d\n%d\n",fichier_exemples,fichier_verif,moyennisation,recup_poids,verif_appr,nbpresentations,fonction_cachee,fonction_sortie);*/
  63.   printf("%d ",couche[0]);
  64. }


 
merci :)


Message édité par Library le 16-12-2002 à 21:51:59
Reply

Marsh Posté le 17-12-2002 à 08:08:41    

c pas le printf qui merde, c'est ça
 
w=malloc(nbcouches*max*max*sizeof(float));
w[c][i][j]=w[c*max*max+i*max+j]
 
sachant que w est un float*. par contre ton code est assez mal foutu. j'ai jamais vu autant de variables globales. et il est inutile de donner les prototypes de fonctions des bibliotheques (ca sert à ça les .h) et si tu définis tes fonctions utilisateurs apres main, à ce moment la, mets les prototypes justes apres les includes
 
et au fait: tu peux combiner tout tes fscanf en un seul


Message édité par Taz@PPC le 17-12-2002 à 08:10:10

---------------
du bon usage de rand [C] / [C++]
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed