Partage
  • Partager sur Facebook
  • Partager sur Twitter

rewind : expected expression befor "FILE"

erreur de compilation

Sujet résolu
    26 mars 2020 à 18:08:37

    Bonjour,

    comme beaucoup, je travaille en ce moment même sur leTP de m@teo21 : le pendu.

    Je saute directement au probleme : dans ma fonction "faireMotMagique", je met une variable à un nombre alleatoir entre 5 et 3530.

    Puis j'ouvre le fichier, et je veux aller au début. Là, j'ai le choix entre "fseek(Dictionnaire_de_mots, 0, SEEK_SET);" et "rewind (FILE *Dictionnaire_de_mots.txt);"

    où dictionnaire_de_mot est un fichier .txt qui contient une liste de mot.

    Seulement voilà : avec fseek le programe se suspend à son niveau (j'ai mis un printf avant et un apres, le premier s'affiche mais pas le deuxieme), et avec rewind il me met à la compilation:

    TP_pendu.c:283:15: error: expected expression before ‘FILE’
           rewind (FILE *Dictionnaire_de_mots.txt);

    Si vous voulez que je baence tout mon code, je peux...mais il est long.

    Merci d'avance !

    PS : je code sous gedit, avec comme OS ubuntu18.

    -
    Edité par Durza42 26 mars 2020 à 18:09:34

    • Partager sur Facebook
    • Partager sur Twitter

    La gentillesse est le langage qu'un sourd peut entendre et qu'un aveugle peut voir.

    Il n'y a qu'un seul monde et il est faux, cruel, contradictoire, séduisant et dépourvu de sens. Un monde ainsi constitué est le monde réel. Nous avons besoin de mensonges pour conquérir cette réalité, cette "vérité".

      26 mars 2020 à 18:19:08

      Ton "rewind (FILE *Dictionnaire_de_mots.txt);" est bizarre. J'espère qu'il ne figure pas ainsi dans ton code. 

      Le paramètre de cette fonction doit être un flux, pas une chaine de caractères. Et de plus tu ne doit pas faire figurer le type du paramètre lors de l'appel de la fonction.

      • Partager sur Facebook
      • Partager sur Twitter
        26 mars 2020 à 18:29:22

        Si...

        J'avoue avoir juste bêtement copié-collé le rewind de m@teo21 en remplacant "fichier" par mon fichier "Dictionnaire_de_mots.txt" ;

        ^^Et de plus tu ne doit pas faire figurer le type du paramètre lors de l'appel de la fonctionsi j'ai bien compris tu veux dire enlever "FILE" ? je vien d'aisseyer, le compilateur n'aime pas non plus...

        Comment est-ce que tu le metterait ? Je crois que je n'ai pas très bien tout compris...

        • Partager sur Facebook
        • Partager sur Twitter

        La gentillesse est le langage qu'un sourd peut entendre et qu'un aveugle peut voir.

        Il n'y a qu'un seul monde et il est faux, cruel, contradictoire, séduisant et dépourvu de sens. Un monde ainsi constitué est le monde réel. Nous avons besoin de mensonges pour conquérir cette réalité, cette "vérité".

          26 mars 2020 à 18:35:00

          Hello,

          Lorsque tu ouvres ton fichier, pas besoin d'un fseek(....,SEEK_SET): l'indicateur de position est déjà au début du fichier. Et comme toujours lors de l'appel à une fonction, on ne précise pas le type de l'argument passé: rewind(dictionnaire_de_mots) si dictionnaire_de_mots est du type FILE *

          • Partager sur Facebook
          • Partager sur Twitter

          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

            26 mars 2020 à 18:44:56

            ^^l'indicateur de position est déjà au début du fichier   je m'en doutait ; cependant, j'ai fait en sorte que l'utilisateur puisse relancer le pendu si il veut rejouer. Et là, le"curseur" ne sera plus au début puissque je l'aurait changé de place. Bref, aucune importance : j'ai mis "rewind (Dictionnaire_de_mots);"comme tu me l'avait dit et ça compile...

            Mais de nouveau le probleme de fseek : le premier printf s'affiche, pas le deuxieme. --> obligé de sortir du programe avec ctr+c (je suis dans un terminal).

            -
            Edité par Durza42 26 mars 2020 à 18:52:38

            • Partager sur Facebook
            • Partager sur Twitter

            La gentillesse est le langage qu'un sourd peut entendre et qu'un aveugle peut voir.

            Il n'y a qu'un seul monde et il est faux, cruel, contradictoire, séduisant et dépourvu de sens. Un monde ainsi constitué est le monde réel. Nous avons besoin de mensonges pour conquérir cette réalité, cette "vérité".

              26 mars 2020 à 18:57:16

              Un bon plan serait de poster ton code :)
              • Partager sur Facebook
              • Partager sur Twitter

              On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                26 mars 2020 à 19:02:52

                OK :

                par contre comme dans les languages il n'y pas le C j'ai mis en c++ (mais ça change rien)

                #include <stdio.h>//inclision des bibliotheques
                #include <stdlib.h>//pareil
                #include <ctype.h>//pareil, permet "toupper"
                #include <string.h>//pour les chaines de caractere
                #include <time.h>//pour les nombres alleatoirs.
                
                char caracterePropose = 'A', motSecret[] = "", *mot, *copieMot;
                int nombreDeJoueurs = 2, nombreDeLettres = 6;
                int ouvrirFichier();
                char lireCaractere();
                void faireMotMagique ();
                
                int main (int argc, char* argv[]) {
                   int mauvaiseEntre = 0, i = 0, presance = 0, rejouer= 0, compteurDeCoups = 10, gagne = 0, interaction = 1, *tableau = 0;
                   tableau = malloc (nombreDeLettres * 4 + 1);
                   copieMot = malloc (nombreDeLettres * 4 + 1);
                   printf ("ceci est un jeu de pendu ;\nSavez-vous jouer au pendu ? \n\toui = 1\n\tNon = 0.");
                   scanf ("%d", &interaction);
                   
                   if (interaction == 1) {
                      printf ("parfait.\n");
                   }
                   else {
                      printf ("Bon, je vais vous expliquer. \n Le but du jeu est de trouver un mot choisit soit par une autre personne soit (dans le cas où vous jouez en mode 1 joueur) par l'ordinateur.\nPour cela, vous avez 10 coups ; à chaque erreur, vous en avez un de moins.\n\n");
                   }
                
                   do {
                      if (i == 9) {
                         printf ("derniere chance :");
                      }
                
                      printf ("voulez-vous jouer en mode :\nun joueur(1)\ndeux joueurs(2)\n");
                      scanf ("%d", &nombreDeJoueurs);
                
                      if (nombreDeJoueurs == 1) {
                         printf ("vous jouez en mode 1 joueurs\n\n");
                         mauvaiseEntre = 0;
                
                         faireMotMagique();
                         
                
                         for (i = 0 ; i < nombreDeLettres ; i++) {
                            tableau[i] = 0;
                            copieMot[i] = '*';
                         }
                
                         char lettrePropose = 'A';
                
                         do {
                
                            printf ("Voici le mot que vous devez trouver au stade où vous en êtes :\t");         
                
                            for (i = 0 ; i < nombreDeLettres ; i++) {
                               printf ("%c", copieMot[i]);
                            }
                
                            printf ("\nIl vous reste %d coups.\n", compteurDeCoups);
                            printf ("Proposez une lettre :\n");
                            scanf("%c", &caracterePropose);
                            lireCaractere();
                            printf ("\nvous avez bien proposé %c ?\nOui = 1\nNon = 0.\n", caracterePropose);
                            scanf ("%d", &interaction);
                   
                            if (interaction == 1) {
                               int y = 0;
                               printf ("parfait.\n\n");
                               gagne = 1;
                               presance = 0;
                               
                               for (y = 0 ; y < nombreDeLettres ; y++) {
                                  
                                  if (motSecret[y] == caracterePropose) {
                                     tableau[y] = 1;
                                     copieMot[y] = motSecret[y];
                                     presance = 1;
                                  }
                                  
                                  if (tableau[y] == 0) {
                                  
                                     gagne = 0;
                                  }
                               }
                                  
                               if (presance == 0) {
                                  printf ("il n'y a pas de %c dans le mot que vous cherchez.\n\n", caracterePropose);
                                  compteurDeCoups--;
                               }
                               
                               if (gagne == 1) {
                                  printf ("Bravo, vous avez bien trouvé le mot mystere : ");
                
                                  for (i = 0 ; i < nombreDeLettres ; i++) {
                                     printf ("%c", motSecret[i]);
                                  }
                
                                  printf ("\n\n");
                               }
                
                               if (compteurDeCoups <= 0){
                                  printf ("Vous avez perdu !\n\nLe mot mystere était : ");
                
                                  for (i = 0 ; i < nombreDeLettres ; i++) {
                                     printf ("%c", motSecret[i]);
                                  }
                
                                  printf ("\n\nVoulez-Vous rejouer ?\noui = 1\nNon = 0.\n");
                                  scanf ("%d", &rejouer);
                               }
                
                            }
                
                            else if (interaction == 0){
                               printf ("mince...\n\n");
                               gagne = 0;
                            }
                            else {
                               printf ("desole, je n'ai pas compris...");
                               gagne = 0;
                            }
                
                            free(tableau);
                            free(copieMot);
                         } while (gagne != 1);
                      }
                
                
                      else if (nombreDeJoueurs == 2) {
                
                         printf ("vous jouez en mode 2 joueurs\n");
                         mauvaiseEntre = 0;
                
                         printf ("Le premier joueur entre un mot que l'autre devra deviner.\nCombien de lettres fait votre mot ?\n");
                         scanf ("%d", &nombreDeLettres);
                
                         mot = malloc (nombreDeLettres + 1);
                         copieMot = malloc (nombreDeLettres + 1);
                         int *tableau;
                         tableau = malloc (nombreDeLettres * 4 + 1);
                
                         for (i = 0 ; i < nombreDeLettres ; i++) {
                            tableau[i] = 0;
                            copieMot[i] = '*';
                         }
                
                         printf ("Quel est votre mot ?\n");
                         scanf ("%s", mot);
                         for (i= 0 ; i < nombreDeLettres ; i++) {
                            mot[i] = toupper(mot[i]); // On met la lettre en majuscule si elle ne l'est pas déjà
                         }
                         
                         printf ("votre mot est bien %s ?\nOui = 1\nNon = 0\n", mot);
                         scanf ("%d", &interaction);
                         
                         if (interaction == 1) {
                            printf ("\nParfait.\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\tÀ l'autre de deviner\n");
                            char lettrePropose = 'A';
                
                            do {
                         
                               for (i = 0 ; i < nombreDeLettres ; i++) {
                                  printf ("%c", copieMot[i]);
                               }
                               
                               printf ("\n\n");
                               printf ("Il vous reste %d coups.\n", compteurDeCoups);
                               printf ("Proposez une lettre :\n");
                               scanf("%c", &caracterePropose);
                               lireCaractere();
                               printf ("vous avez bien proposé %c ?\nOui = 1\nNon = 0.\n", caracterePropose);
                               scanf ("%d", &interaction);
                   
                               if (interaction == 1) {
                                  int y = 0;
                                  printf ("parfait.\n\n");
                                  gagne = 1;
                                  presance = 0;
                                  
                                  for (y = 0 ; y < nombreDeLettres ; y++) {
                                     
                                     if (mot[y] == caracterePropose) {
                                        tableau[y] = 1;
                                        copieMot[y] = mot[y];
                                        presance = 1;
                                     }
                                     
                                     if (tableau[y] == 0) {
                                     
                                        gagne = 0;
                                     }
                                  }
                                  
                                  if (presance == 0) {
                                     printf ("il n'y a pas de %c dans le mot que vous cherchez.\n\n", caracterePropose);
                                     compteurDeCoups--;
                                  }
                                  
                                  if (gagne == 1) {
                                     printf ("Bravo, vous avez bien trouvé le mot mystere : ");
                                     for (i = 0 ; i < nombreDeLettres ; i++) {
                                        printf ("%c", mot[i]);
                                     }
                                     printf ("\n\n");
                                  }
                
                                  if (compteurDeCoups <= 0){
                                     printf ("Vous avez perdu !\n\nLe mot mystere était : ");
                                     for (i = 0 ; i < nombreDeLettres ; i++) {
                                        printf ("%c", mot[i]);
                                     }
                                     printf ("\n\nVoulez-Vous rejouer ?\noui = 1\nNon = 0.\n");
                                     scanf ("%d", &rejouer);
                                  }
                                  
                                  else {
                                     printf ("Voici le mot que vous devez trouver au stade où vous en êtes :\n");
                                  }
                               }
                               
                               else {
                                  printf ("mince...\n\n");
                                  gagne = 0;
                               }
                            
                            } while (gagne != 1);
                            
                               if (gagne = 1) {
                                  printf ("voulez-vous rejouer ?\nOui = 1\nNon = 0.\n");
                                  scanf("%d\n", &rejouer);
                                  
                                  if (rejouer != 1) {
                                     printf ("Tres bien. Au revoir, et à bientôt !\n\n");
                                     exit(0);
                                  }
                               }
                            }
                   
                            else {
                               printf ("mince...\n\n");
                               mauvaiseEntre = 1;
                            }
                            
                            free(mot); // On n'a plus besoin de la mémoire, on la libère
                            free(copieMot); // On n'a plus besoin de la mémoire, on la libère
                            free(tableau); // On n'a plus besoin de la mémoire, on la libère
                         }
                         else {
                            printf ("vous ne pouvez pas jouer avec %d joueurs.\n\n", nombreDeJoueurs);
                            mauvaiseEntre = 1;
                            i++;
                         }
                
                   } while (mauvaiseEntre == 1 && i < 10 || rejouer == 1);
                
                }
                
                char lireCaractere() {
                
                   char caractere = 0;
                   caractere = getchar(); // On lit le premier caractère ; La fonction getchar renvoie le caractère que le joueur a tapé
                   caractere = toupper(caractere); // On met la lettre en majuscule si elle ne l'est pas déjà
                
                   // On lit les autres caractères mémorisés un à un jusqu'au \n (pour les effacer) 
                   while (getchar(/*la, il y a le deuxieme caratere, par ex. /n (entre) */) != '\n') ;//en rappelant getchar on prend le caractère suivant que l'utilisateur a tapé
                
                   caracterePropose = caractere;
                }
                
                void faireMotMagique () {
                   printf ("fonction\n\n");
                   long caractereDico = 3, caractereActuel = 0, u = 0;
                   const int MAX = 3530, MIN = 5;
                   char stock = 0;
                   srand(time(NULL));
                   printf ("allocation\n\n");
                   FILE* Dictionnaire_de_mots = NULL;
                  
                   Dictionnaire_de_mots = fopen("Dictionnaire_de_mots.txt", "r");
                   printf ("--> fichier\n\n");
                   if (Dictionnaire_de_mots != NULL) {
                      caractereDico = (rand() % (MAX - MIN + 1)) + MIN;
                      printf ("dico non NULL\n\n");
                      rewind (Dictionnaire_de_mots);
                      printf ("curseur au début");
                      fseek(Dictionnaire_de_mots, caractereDico, SEEK_SET);//Le curseur est deux caracteres apres le debut du fichier
                      printf ("bougé !");
                
                      do {
                         stock = fgetc(Dictionnaire_de_mots);
                      } while ("stock != \n");
                
                      nombreDeLettres = 0;
                      copieMot = malloc (nombreDeLettres * 4 + 1);
                      printf ("%s", copieMot);
                         
                      do {
                         printf ("extraction\n\n");
                         nombreDeLettres++;
                         printf ("%c", copieMot[nombreDeLettres]);
                         stock = fgetc(Dictionnaire_de_mots);
                         mot[nombreDeLettres] = stock;
                         printf ("%c", mot[u]);
                      } while (stock != '\n');
                      
                   fclose(Dictionnaire_de_mots);
                   free (copieMot);
                   }
                
                   else {
                      // On affiche un message d'erreur si on veut
                      perror("desole, le fichier contenant les mots a trouver n'a pas pu etre ouvert ; par consecant, il est impossible de jouer en mode 1 joueur.\n");
                      exit(0);
                   }
                
                }
                
                
                
                
                
                
                
                



                Voilà.

                Bonne chance !

                ---------------------modif-----------------------------------------

                Ci join : une capture d'écran du terminal :

                -------remodif--------------------

                Bon, ça y est, j'ai trouvé : j'ai une bouce infinie derière...(dans le while l.289 j'avait lis la condition entre guillemets alors forcement...)

                !!!

                -
                Edité par Durza42 27 mars 2020 à 14:54:07

                • Partager sur Facebook
                • Partager sur Twitter

                La gentillesse est le langage qu'un sourd peut entendre et qu'un aveugle peut voir.

                Il n'y a qu'un seul monde et il est faux, cruel, contradictoire, séduisant et dépourvu de sens. Un monde ainsi constitué est le monde réel. Nous avons besoin de mensonges pour conquérir cette réalité, cette "vérité".

                rewind : expected expression befor "FILE"

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown