Partage
  • Partager sur Facebook
  • Partager sur Twitter

Le pendu - fichier dico.txt

2 décembre 2007 à 22:57:16

Slt,
quand je compile mon programme de pendu, le morceau que voici met trouve une erreur a la ligne3 :

  1. int pecheMot(char* motSecret)
  2. {
  3.     FILE* dico = NULL;
  4.     long numMot = 0, nbrMots = 0;
  5.     int caractereLu = 0;
  6.     dico = fopen("dico.txt","r");
  7.     if (dico == NULL)
  8.        return 0;


Je ne comprend ^pas pourquoi. J4ai bien mis la librairie au debut, et la ligne correspond a celle du programme de m@teo...

.
  • Partager sur Facebook
  • Partager sur Twitter
2 décembre 2007 à 23:37:12

Salut

Pourrait on avoir un peu plus long de code s'il te plait, voir tes #include, etc..
et verifie si il ne te manque pas une incolade "{"
  • Partager sur Facebook
  • Partager sur Twitter
mes sites web www.manga-vf.fr et www.series-vf.fr
3 décembre 2007 à 14:15:30

Citation : superpierre

quand je compile mon programme de pendu, le morceau que voici met trouve une erreur a la ligne3 :

  1. int pecheMot(char* motSecret)
  2. {
  3.     FILE* dico = NULL;
  4. <...>



Tu as sans doute oublié d'inclure <stdio.h> qui définit FILE et NULL...

  • Partager sur Facebook
  • Partager sur Twitter
Music only !
3 décembre 2007 à 17:58:38

Citation : superpierre


Tu as sans doute oublié d'inclure <stdio.h> qui définit FILE et NULL...



non je l'ai dit dans mon 1er message je l'ai mise. Voila une plus grande partie du fichier :

fichier dico.c :
  1. int pecheMot(char* motSecret)
  2. {
  3.     FILE* dico = NULL;
  4.     long numMot = 0, nbrMots = 0;
  5.     int caractereLu = 0;
  6.     dico = fopen("dico.txt","r");
  7.     if (dico == NULL)
  8.        return 0;
  9.     do
  10.     {
  11.               caractereLu = fgetc(dico);
  12.               if(caractereLu == '\n')
  13.                              nbrMots++;
  14.     }while(caractereLu != EOF);
  15.     numMot = aleatoire(nbrMots);
  16.     rewind(dico);
  17.     while(numMot > 0)
  18.     {
  19.                  caractereLu = fgetc(dico);
  20.                  if(caractereLu == '\n')
  21.                                 numMot--;
  22.     }
  23.     fgets(motSecret, 100, dico);
  24.     motSecret[strlen(motSecret) - 1] = '\0';
  25.     fclose(dico);
  26.     return 1;
  27. }
  28. long aleatoire (long nbrMots)
  29. {
  30.      long num = 0;
  31.      srand(time(NULL));
  32.      num = (ran() % nbrMots);
  33.      return num;
  34. }


fichier dico.h

  1. int pecheMot(char* motSecret);
  2. long aleatoire (long nbrMots);

librairie - variable et appel de la fonction dans le main.c :

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <time.h>
  5. #include <string.h>
  6. #include <unistd.h>
  7. #include <ctype.h>
  8. #include "fonctions.h"
  9. #include "dico.h"
  10. int main(int argc, char *argv[])
  11. {
  12.  char continuer = 1;
  13.  printf(" Bienvenue dans le jeu du pendu (c'est vous)...\n\n");
  14.  while(continuer)
  15.  {
  16.   char vie = 9, lettre = 0, motSecret[100] = {0};
  17.   long presence = 0, i = 0, tailleMot = 0;
  18.   int *lettreTrouvee = NULL;
  19.   if (!pecheMot(motSecret));
  20.      return 0;
  21. [...]    [...]


Voila. je pense que j'ai mis assez cette fois. Si no, dite le et je met tou alor.
  • Partager sur Facebook
  • Partager sur Twitter
3 décembre 2007 à 18:04:46

Citation : superpierre

Citation : superpierre


Tu as sans doute oublié d'inclure <stdio.h> qui définit FILE et NULL...


non je l'ai dit dans mon 1er message je l'ai mise. Voila une plus grande partie du fichier :
fichier dico.c :

  1. <rien !>
  2. int pecheMot(char* motSecret)
  3. {
  4. <...>



Genre têtu, hein ? Alors elle est où l'inclusion de <stdio.h> dans le .c ? Tu as compris ce qu'était la compilation séparée ?

A lire de A à Z : http://mapage.noos.fr/emdel/codage.htm

  • Partager sur Facebook
  • Partager sur Twitter
Music only !
3 décembre 2007 à 18:38:54

AAAH ! Je crois que j'ai compris. Il faut remettre l'include dans le dico.c en plus de le mettre dans main . c .

Je pensais que ca risquaitde faire doublons comme il le lisait 2 fois. Je suis bete des fois :p

Peut-on alors mettre toutes les librairie dans tout les .c (pour eviter de les oublier)???

Merci du coup de main.
J'ai juste une derniere erreur a la ligne 38 (ce n'est plus les librairie qui manque cette fois j'espere...).

Peut-tu eclairer a nouveau ma lanterne ? :euh:
  • Partager sur Facebook
  • Partager sur Twitter
3 décembre 2007 à 18:48:14

Citation :

Peut-on alors mettre toutes les librairie dans tout les .c (pour éviter de les oublier)???


Tout d'abord, on ne met pas de bibliothèque dans les *.c, mais leurs entêtes !

Toutes les librairies, c'est à dire ? Tu n'as besoin de mettre que celles qui te servent..

Citation :

J'ai juste une derniere erreur a la ligne 38


Si tu ne la donnes pas on ne va pas pouvoir faire grand chose.
  • Partager sur Facebook
  • Partager sur Twitter
3 décembre 2007 à 18:58:55

Dsl mais on vien de me dire de mettre le librairie stdio.h dans mon code.c et maintenant la premiere erreur est corrigée. Alor faudrait savoir. o_O

Par toutes les librairie je n'entend pas toutes les librairie du monde (impossible et inutile)mais toutes celle de base mais qui ne sont pas la par defaut.
CAD:
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <time.h>
  5. #include <string.h>
  6. #include <unistd.h>
  7. #include <ctype.h>


je les mets dans tout mais main.c pour ne plus avoir a m'en soucier par après.
Donc, peut-on les mettre dans tout les .c (ou.h ca revient + ou - au meme je pense, juste l'organisation change non ?)?

Quand a l'erreur il indique ""dico.c : conflicting types for 'aleatoire' "" /// ""dico.c : previous implicit declaration of 'aleatoire' was here "". Je ne comprend pas tout, juste un mot : "declaration"(facile :) ). Je vais me mettre a l'Anglais d'ici peu. Mais la, pas compris ... o_O

Voila...
  • Partager sur Facebook
  • Partager sur Twitter
3 décembre 2007 à 19:15:20

Citation :

Dsl mais on vient de me dire de mettre le librairie stdio.h dans mon code.c et maintenant la premiere erreur est corrigée. Alors faudrait savoir. o_O


stdio.h n'est en fait pas la bibliothèque en elle même, c'est seulement une composante qui permet de s'en servir, on dit que c'est son interface (le fichier d'entête).

Citation :

Donc, peut-on les mettre dans tout les .c (ou.h ca revient + ou - au meme je pense, juste l'organisation change non ?)?


Ce n'est pas "on peut", mais "on doit".

Image utilisateur
Si tu ne comprends pas encore ce schéma, revoie le cours sur la programmation modulaire, ou pose des question si il y a quelque chose qui t'échappe ;)
  • Partager sur Facebook
  • Partager sur Twitter
3 décembre 2007 à 19:22:18

OK. C'est compris chef. Je les mettrai dans tout les .c des maintenant.

C'est pas que je ne te croi pas mais je ne comprend pas comment mes 2 autres programme fonctionne alors. Je n'ai pas mis stdio, ... dans les fichier .c sauf dans le main. Mais si tu dis qui faut les mettre, je les mettrai.

Par contre cdela ne resou pas l'erreur de la ligne 38. A-tu la soluce pour cela aussi ?

rapelle de l'erreur :""dico.c : conflicting types for 'aleatoire' "" /// ""dico.c : previous implicit declaration of 'aleatoire' was here ""
(Je ne comprend pas alor je ne sais pas le dire en francais)
  • Partager sur Facebook
  • Partager sur Twitter
3 décembre 2007 à 19:31:55

Citation : superpierre

Dsl mais on vien de me dire de mettre le librairie stdio.h dans mon code.c et maintenant la premiere erreur est corrigée. Alor faudrait savoir. o_O


Je n'ai jamais parlé de 'librairie' ni de bibliothèque. Une bonne fois pour toutes, <stdio.h> est un fichier d'entête et rien d'autre. OK ?

Donc, tu inclus les fichier d'entête à la demande, en fonction de ton usage des fonctions. Ni plus, ni moins. Pour être sûr de ne rien oublier, je recommande de bien régler son compilateur.

Quand à l'anglais, il faut t'y mettre sérieusement. Impossible d'être un informaticien sérieux sans une maitrise de la lecture de l'anglais.

Citation : Pas de titre

rapelle de l'erreur :""dico.c : conflicting types for 'aleatoire' "" /// ""dico.c : previous implicit declaration of 'aleatoire' was here ""


Signifie qu'il y a conflit de types entre la déclaration de la fonction (son prototype, donc, pour simplifier) et sa définition. Vérifie si tout ça est bien cohérent.
  • Partager sur Facebook
  • Partager sur Twitter
Music only !
4 décembre 2007 à 4:05:44

Merci pour la traduction mais ca ne m'avance pas beaucoup. J'ai verefié mon prototype et il me semble pourtant correcte. Pourrais-tu i jeter un coup d'oeil et véréfié ?

  1. long aleatoire (long nbrMots);


  1. long aleatoire (long nbrMots)
  2. {
  3.      long num = 0;
  4.      srand(time(NULL));
  5.      num = (ran() % nbrMots);
  6.      return num;
  7. }


si il faut plus le reste est au dessus
  • Partager sur Facebook
  • Partager sur Twitter
4 décembre 2007 à 12:19:53

Citation : superpierre

Merci pour la traduction mais ca ne m'avance pas beaucoup. J'ai verefié mon prototype et il me semble pourtant correcte. Pourrais-tu i jeter un coup d'oeil et véréfié ?


Je ne vois pas de problème avec ce code. Par contre, il y a un problème de comportement. Si tu veux un tirage vraiment pseudo-aléatoire, il ne faut appeler srand() qu'une seule fois. Elle n'a donc rien à faire dans cette fonction. Il faut la mettre au début du main().

http://mapage.noos.fr/emdel/notes.htm#rand

Pour gérer correctement la génération des nombres pseudo-aléatoires, je conseille les 2 macros définies ici :

http://delahaye.emmanuel.free.fr/clib/ed/inc/random.h
  • Partager sur Facebook
  • Partager sur Twitter
Music only !
4 décembre 2007 à 14:13:35

D'accord, je le met au debut. :)
Pourtant dans le tuto ils le mettent a la meme place que moi.

Ca ne change pas le probleme :(:( ,
il me met toujours une erreur.
  • Partager sur Facebook
  • Partager sur Twitter
4 décembre 2007 à 14:14:49

Citation : superpierre

Ca ne change pas le probleme :(:( ,

il me met toujours une erreur.

Poste tout ton code. Il y a certainement autre chose.
  • Partager sur Facebook
  • Partager sur Twitter
Music only !
4 décembre 2007 à 14:31:15

Voila, voila...

main.c :

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <time.h>
  5. #include <string.h>
  6. #include <unistd.h>
  7. #include <ctype.h>
  8. #include "fonctions.h"
  9. #include "dico.h"
  10. int main(int argc, char *argv[])
  11. {
  12.  char continuer = 1;
  13.  printf(" Bienvenue dans le jeu du pendu (c'est vous)...\n\n");
  14.  while(continuer)
  15.  {
  16.   char vie = 9, lettre = 0, motSecret[100] = {0};
  17.   long presence = 0, i = 0, tailleMot = 0;
  18.   int *lettreTrouvee = NULL;
  19.   if (!pecheMot(motSecret));
  20.      return 0;
  21.   tailleMot = strlen(motSecret);
  22.   lettreTrouvee = malloc (tailleMot * sizeof(int));
  23.   if(lettreTrouvee == NULL)
  24.                    return 0;
  25.   while( vie > 0 && !gagne(motSecret, lettreTrouvee))
  26.   {
  27.          printf("Ils vous reste encore %ld chances\n\n", vie);
  28.          printf("mot a trouver :");
  29.          afficheMot(motSecret, lettreTrouvee);
  30.          printf("\n\nVeuillez entrer une lettre :");
  31.          lettre = lireCaractere();
  32.          presence = rechercheLettre(lettre, motSecret, lettreTrouvee);
  33.          if(presence == 1)
  34.          {
  35.                      printf("\n-->    --->  Bravo, la lettre %c est bien dans le mot\n________________________________________________________\n\n", lettre);
  36.          }
  37.          if(presence == 0)
  38.          {
  39.                      printf("Aïe, la lettre %c n'est pas dans le mot. La pendaison approche...\n________________________________________________________\n\n", lettre);
  40.                      vie--;
  41.          }
  42.   }
  43.   if (gagne(motSecret, lettreTrouvee))
  44.   {
  45.                        printf("Felicitation, vous avez trouvé le mot --> %s <-- et il vous restait %ld chances.\n\n", motSecret, vie);
  46.   }
  47.   else
  48.   {
  49.       printf("Desole mais ... VOUS ETES MORT ... Le mot etait ''%s''.\n\n",motSecret);
  50.   }
  51.   printf("\nVoulez-vous rejouer ?\n\n0. non\n1. oui\n\n");
  52.   scanf("%ld", &continuer);
  53.  }
  54.   system("PAUSE");     
  55.   return 0;
  56. }


fonctions.c:

  1. char lireCaractere()
  2. {
  3.     char caractere = 0;
  4.     caractere = getchar();
  5.     caractere = toupper(caractere);
  6.     while (getchar() != '\n') ;
  7.     return caractere;
  8. }
  9. void afficheMot(char motSecret[],char lettreTrouvee[])
  10. {
  11.      long i = 0;
  12.      for(i = 0 ; motSecret[i] != '\0' ; i++)
  13.      {
  14.            if(lettreTrouvee[i])
  15.                                printf("%c",motSecret[i]);
  16.            else
  17.                printf("_");
  18.      }
  19. }
  20. int rechercheLettre(char lettre, char motSecret[], char lettreTrouvee[])
  21. {
  22.                      long i = 0;
  23.                      int presence = 0;
  24.                      for(i == 0; motSecret[i] != '\0'; i++)
  25.                      {
  26.                            if(lettre == motSecret[i])
  27.                            {
  28.                                      lettreTrouvee[i] = 1;
  29.                                      presence = 1;
  30.                            }
  31.                      }
  32.                      return presence;
  33. }
  34. int gagne(char motSecret[], int lettreTrouvee[])
  35. {
  36.     long j = 0;
  37.     long k = 1;
  38.     for(j = 0; motSecret[j] != '\0'; j++)
  39.     {
  40.           if(lettreTrouvee[j] == 0)
  41.                               k = 0;
  42.     }
  43.     return k;
  44. }


fonction.h:

  1. char lireCaractere();
  2. void afficheMot(char motSecret[],char lettreTrouvee[]);
  3. int rechercheLettre(char lettre, char motSecret[], char lettreTrouvee[]);
  4. int gagne(char motSecret[], char lettreTrouvee[]);


dico.c :

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int pecheMot(char* motSecret)
  4. {
  5.     FILE* dico = NULL;
  6.     long numMot = 0, nbrMots = 0;
  7.     int caractereLu = 0;
  8.     dico = fopen("dico.txt","r");
  9.     if (dico == NULL)
  10.        return 0;
  11.     do
  12.     {
  13.               caractereLu = fgetc(dico);
  14.               if(caractereLu == '\n')
  15.                              nbrMots++;
  16.     }while(caractereLu != EOF);
  17.     numMot = aleatoire(nbrMots);
  18.     rewind(dico);
  19.     while(numMot > 0)
  20.     {
  21.                  caractereLu = fgetc(dico);
  22.                  if(caractereLu == '\n')
  23.                                 numMot--;
  24.     }
  25.     fgets(motSecret, 100, dico);
  26.     motSecret[strlen(motSecret) - 1] = '\0';
  27.     fclose(dico);
  28.     return 1;
  29. }
  30. long aleatoire (long nbrMots)
  31. {
  32.      long num = 0;
  33.      srand(time(NULL));
  34.      num = (ran() % nbrMots);
  35.      return num;
  36. }


dico.h :

  1. int pecheMot(char* motSecret);
  2. long aleatoire (long nbrMots);


->Rappel erreur : ""dico.c : conflicting types for 'aleatoire' "" /// ""dico.c : previous implicit declaration of 'aleatoire' was here ""
->soit :conflit de types entre la déclaration de la fonction et sa définition.

Fait avec "dev C++" (je pense qu'il y a de legere difference avec d'autre programme alor je precise)

La ligne fautive est le n° 41 du "dico.c" (n°2 ci-dessous) :

  1. long aleatoire (long nbrMots)
  2. {                                                   <-  <-  erreur <-  <- erreur <-
  3.      long num = 0;

Voila, je ne saurai pas mettre plus... ^^
  • Partager sur Facebook
  • Partager sur Twitter
4 décembre 2007 à 15:00:49

Citation : superpierre

Voila, voila...


Je conseille un meilleur réglage du compilateur. Ton code ne compile pas
Project   : Forums
Compiler  : GNU GCC Compiler (called directly)
Directory : C:\dev\forums\
--------------------------------------------------------------------------------
Switching to target: default
Compiling: fonctions.c
fonctions.c:2: warning: function declaration isn't a prototype
fonctions.c: In function `lireCaractere':
fonctions.c:5: warning: implicit declaration of function `getchar'
fonctions.c:6: warning: implicit declaration of function `toupper'
fonctions.c: In function `afficheMot':
fonctions.c:21: warning: implicit declaration of function `printf'
fonctions.c: In function `rechercheLettre':
fonctions.c:32: warning: statement with no effect
Compiling: main.c
In file included from main.c:8:
fonctions.h:1: warning: function declaration isn't a prototype
main.c: In function `main':
main.c:24: warning: empty body in an if-statement
main.c:35: warning: passing arg 2 of `gagne' from incompatible pointer type
main.c:37: warning: long int format, int arg (arg 2)
main.c:39: warning: passing arg 2 of `afficheMot' from incompatible pointer type
main.c:44: warning: passing arg 3 of `rechercheLettre' from incompatible pointer type
main.c:56: warning: passing arg 2 of `gagne' from incompatible pointer type
main.c:58: warning: long int format, int arg (arg 3)
main.c:66: warning: long int format, different type arg (arg 2)
main.c:21: warning: unused variable `i'
main.c: At top level:
main.c:12: warning: unused parameter 'argc'
main.c:12: warning: unused parameter 'argv'
main.c: In function `main':
main.c:27: warning: will never be executed
main.c:27: warning: will never be executed
main.c:27: warning: will never be executed
main.c:27: warning: will never be executed
main.c:27: warning: will never be executed
main.c:27: warning: will never be executed
main.c:27: warning: will never be executed
main.c:27: warning: will never be executed
main.c:27: warning: will never be executed
main.c:27: warning: will never be executed
main.c:27: warning: will never be executed
main.c:27: warning: will never be executed
main.c:27: warning: will never be executed
Compiling: dico.c
dico.c: In function `pecheMot':
dico.c:21: warning: implicit declaration of function `aleatoire'
dico.c:32: warning: implicit declaration of function `strlen'
dico.c: At top level:
dico.c:41: error: conflicting types for 'aleatoire'
dico.c:21: error: previous implicit declaration of 'aleatoire' was here
dico.c: In function `aleatoire':
dico.c:44: warning: implicit declaration of function `time'
dico.c:45: warning: implicit declaration of function `ran'
Process terminated with status 1 (0 minutes, 6 seconds)
2 errors, 34 warnings

pour de nombreuses raisons :


  • fonctions.c : il manque l'inclusion de "fonction.h" pour la vérification de cohérence entre prototype et définition. Je ne l'ai pas déjà expliqué ?. Par exemple :
    fonctions.h : int gagne(char motSecret[], char lettreTrouvee[]);
    fonctions.c : int gagne(char motSecret[], int lettreTrouvee[])
  • Les fonctions sans paramètres doivent le préciser avec (void).
  • Il manque <stdio.h> pour getchar(), <ctype.h> pour toupper() etc.
  • Dans rechercheLettre(), for(i == 0; <...>) est une erreur. C'est i = 0.

  • Il manque la déclaration pour aleatoire(). Le compilateur fait une hypothèse (tout en int) et se prend un vent quand il découvre la définition de la fonction (long etc.). Moralité, déclarer avant d'utiliser. Quand c'est possible, placer l'appelé avant l'appelant. Si il n'est pas exporté, ajouter 'static'.

  • srand() est toujours aussi mal placé, malgré mes recommandations. Je parle aux murs ou quoi ?

  • Dans main.c : if (!pecheMot(motSecret));
    Tu ne veux probablement pas de ce ';'...

  • Dans main() : "%ld" attend une valeur de type long. Tu lui passes une valeur type char (vie). Ca va pas le faire...

  • Le paramètre 'lettreTrouvee' de afficheMot() doit être de type int[] et non char[] comme ici...

  • etc.

Ton code qui compile (je n'ai pas dit qu'il fonctionnait, je ne l'ai même pas essayé) :

http://delahaye.emmanuel.free.fr/forums/superpierre/
  • Partager sur Facebook
  • Partager sur Twitter
Music only !
4 décembre 2007 à 16:34:00

J'ai suivi ton lien vers mapage.noos.fr.:

-J'ai mis les ligne de code qu'il proposent en haut de mes .c -> Ca marche pas.

lignes :

  1. #ifdef __cplusplus
  2. #error This source file is not C++ but rather C. Please use a C-compiler
  3. #endif


-J'ai verifie les .c (pas .C) et les .h (pas .H) et ils sont correcte. -> Ca marche toujours pas.
-J'ai tapé les ligne qu'il disent de mettre dans les option de compiltion -> Ca ne marche encore et toujours pas.

lignes :

  1. -Wall -Wextra -O -Wwrite-strings -Wstrict-prototypes -Wuninitialized
  2. -Wunreachable-code


il ecrit a la compilation :

  1. # Project: pendu
  2. # Makefile created by Dev-C++ 4.9.9.2
  3. CPP  = g++.exe
  4. CC   = gcc.exe
  5. WINDRES = windres.exe
  6. RES  =
  7. OBJ  = main.o fonctions.o dico.o $(RES)
  8. LINKOBJ  = main.o fonctions.o dico.o $(RES)
  9. LIBS =  -L"lib"  
  10. INCS =  -I"include"
  11. CXXINCS =  -I"lib/gcc/mingw32/3.4.2/include"  -I"include/c++/3.4.2/backward"  -I"include/c++/3.4.2/mingw32"  -I"include/c++/3.4.2"  -I"include"
  12. BIN  = pendu.exe
  13. CXXFLAGS = $(CXXINCS)   -Wall -Wextra -O -Wwrite-strings -Wstrict-prototypes -Wuninitialized
  14. -Wunreachable-code
  15. CFLAGS = $(INCS)   -Wall -Wextra -O -Wwrite-strings -Wstrict-prototypes -Wuninitialized
  16. -Wunreachable-code
  17. RM = rm -f
  18. .PHONY: all all-before all-after clean clean-custom
  19. all: all-before pendu.exe all-after
  20. clean: clean-custom
  21.         ${RM} $(OBJ) $(BIN)
  22. $(BIN): $(OBJ)
  23.         $(CC) $(LINKOBJ) -o "pendu.exe" $(LIBS)
  24. main.o: main.c
  25.         $(CC) -c main.c -o main.o $(CFLAGS)
  26. fonctions.o: fonctions.c
  27.         $(CC) -c fonctions.c -o fonctions.o $(CFLAGS)
  28. dico.o: dico.c
  29.         $(CC) -c dico.c -o dico.o $(CFLAGS)

C'est du chinoi pour moi. J'y comprend pas grand chose. Et me dire que mon projet s'appelle "pendu" je m'en passserai bien.


Voila le compte rendu des autres corections deja faite :

1. OK <correction effectuée>

2. Dans le tuto il disent que "void" sert pour une fonction qui ne renvoi rien, or, ici, toute mes fonction renvoie quelque chose. Laquel de mes fonction doit alor etre "void"? <en attente>

3.OK, c'est rajouté <correction effectuée>

4.OK <correction effectuée>

5.D'accord, l'appelé devant l'appellant ((je suppose que l'appelé est la fonction et l'apellant le "aleatoire(nbrMots)")) ds le main.c. Mais le but du prototype n'est-il pas de justement permettre de mettre la fonction ailleur qu'avant ?<en attente>

6.Pour "srand()", desolé mais j'ai copié l'ancien code d'avant cette correction. Je l'ai fait dans ma deuxieme copie mais j'attend toujours de savoir pourquoi il n'est pas mis au debut dans le tuto.<correction effectuée>

7.le ";" est enlevé <correction effectuée>

8.que faut-il a la place du %ld alor ? Je ne connait pas d'autre que %ld (long), %lf (decimal), %c (caractere) et %s (chaine).<en attente>

9.OK <correction effectuée>

10. etc ? Il y en a encore ?

-->>(je precise : Ca ne marche pas encore)


j'ai aussi essayer de lancé le programme avec code::blocks mais ca ne compile pas non plus et il y a la meme erreur.


Pourquoi l'ordinateur ne m'affiche-t-il pas toutes ces erreur ? Moi il me dit juste qu'il y en a une dans la fonction "aleatoire". Autre chose bizarre, apres correction d'une erreur, je compile une fois et il me met une erreur sur le while ligne 35 ds le main.c. Je compile une deuxieme fois et il ne le dit plus. Il ne le dit pazs non plus pour les fois suivantes. Bizard non ?


______________________________________________________________________________________________________________________________________________
_______________________________________________________________________________________________________________________________________________
______________________________________________________________________________________________________________________________________________

Pour faire plus simple :

Ne serait-il pas plus simple que tu remette la version corrigée ? Non pas que je veux que tu corrige a ma place et puis c'est tout, mais je comprendrai mieux en comparant les deux versions pour voir les changements et en deduire le probleme. Ce serait plus simple que de continuer pendant 1 ans a discuter.
Serait-tu d'accord ? Je crois que ce serait moin compliqué.

...
  • Partager sur Facebook
  • Partager sur Twitter
4 décembre 2007 à 22:18:02

Citation


Genre têtu, hein ? Alors elle est où l'inclusion de <stdio.h> dans le .c ? Tu as compris ce qu'était la compilation séparée ?

A lire de A à Z : http://mapage.noos.fr/emdel/codage.htm



On dirait un vrai medecin ( de la programmation )
  • Partager sur Facebook
  • Partager sur Twitter
5 décembre 2007 à 10:37:14

Citation : superpierre

J'ai suivi ton lien vers mapage.noos.fr.:

-J'ai mis les ligne de code qu'il proposent en haut de mes .c -> Ca marche pas.

lignes :

  1. #ifdef __cplusplus
  2. #error This source file is not C++ but rather C. Please use a C-compiler
  3. #endif



-J'ai verifie les .c (pas .C) et les .h (pas .H) et ils sont correcte. -> Ca marche toujours pas.
-J'ai tapé les ligne qu'il disent de mettre dans les option de compiltion -> Ca ne marche encore et toujours pas.


Ton projet est C++. Refait un projet en précisant bien que c'est un projet C et non C++.

Citation : Pas de titre


2. Dans le tuto il disent que "void" sert pour une fonction qui ne renvoi rien, or, ici, toute mes fonction renvoie quelque chose. Laquel de mes fonction doit alor etre "void"? <en attente>


Je parlais des fonctions qui n'ont pas de paramètre : f(). Il faut écrire f(void).

Citation : Pas de titre


5.D'accord, l'appelé devant l'appellant ((je suppose que l'appelé est la fonction et l'apellant le "aleatoire(nbrMots)")) ds le main.c. Mais le but du prototype n'est-il pas de justement permettre de mettre la fonction ailleur qu'avant ?<en attente>


Oui, si la fonction doit être utilisée ailleurs. Mais dans ce cas précis, non.

Citation : Pas de titre


6.Pour "srand()", desolé mais j'ai copié l'ancien code d'avant cette correction. Je l'ai fait dans ma deuxieme copie mais j'attend toujours de savoir pourquoi il n'est pas mis au debut dans le tuto.<correction effectuée>


Bah tout le monde peut faire des erreurs... D'ailleurs dans le tuto, si je me souviens bien, et suite à nos commentaires, il y a une remarque qui précise que srand() ne doit être appelé qu'une seule fois.

Citation : Pas de titre


8.que faut-il a la place du %ld alor ? Je ne connait pas d'autre que %ld (long), %lf (decimal), %c (caractere) et %s (chaine).<en attente>


Attention à ne pas confondre "décimal" (base 10) et "réel"...

"%d" : char, short ou int en décimal
"%u" : unsigned char, unsigned short ou unsigned int en décimal
"%x" : unsigned char, unsigned short ou unsigned int en hexadécimal
"%ld" : long int en décimal
"%e", "%f", "%g" : réel (et pas "%lf")
etc.

Relire ton livre de C ou une bonne référence de fonctions.

http://www.opengroup.org/onlinepubs/000095399/

Citation : Pas de titre


Pourquoi l'ordinateur ne m'affiche-t-il pas toutes ces erreur ?

L'ordinateur fait ce qu'on lui dit de faire. Ici, c'est l'utilisateur qui configure l'IDE qui configure le compilateur pour qu'il montre ou non les défauts. J'ai indiqué comment configurer le compilateur (via l'IDE).

Citation : Pas de titre


Moi il me dit juste qu'il y en a une dans la fonction "aleatoire". Autre chose bizarre, apres correction d'une erreur, je compile une fois et il me met une erreur sur le while ligne 35 ds le main.c. Je compile une deuxieme fois et il ne le dit plus. Il ne le dit pazs non plus pour les fois suivantes. Bizard non ?


Les défauts empêchent la compilation.
Les avertissements, non. Il est donc logique que si on a rien modifié, on les les voit plus, car le code n'est pas recompilé.

Citation : Pas de titre


Ne serait-il pas plus simple que tu remette la version corrigée ?

Et ça, c'est de la déco ?

Citation : -ed-


Ton code qui compile (je n'ai pas dit qu'il fonctionnait, je ne l'ai même pas essayé) :

http://delahaye.emmanuel.free.fr/forums/superpierre/


  • Partager sur Facebook
  • Partager sur Twitter
Music only !
22 janvier 2020 à 10:11:18

bravo ton programme ma sauver la vie

chapeau tu es un tres bon programmeur

  • Partager sur Facebook
  • Partager sur Twitter
22 janvier 2020 à 16:45:04

@faycal1975 bonjour, pour dire merci pas besoin de déterrer un sujet, vous pouvez cliquer sur les pouces levés des messages qui vous ont aidées.

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter