Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de variables

Programme fonctionne pas

Sujet résolu
    24 février 2006 à 17:00:46

    Bonjour ,

    Merci de lire ce post pour essayer de m'aider :)

    Je prend des cours ( sur le Site Du Zér0 ) de C et j'ai surement oublié une petite chose ( enfin je l'espère :D )


    Je suis sous WINDOWS XP et j'utilise Dev-Cpp


    Voici mon problème :(

    Je voudrais faire un programme qui traduit des verbes latin ( oui oui vous avez bien entendu ! :lol: )

    Mais le
    if(principale == "h1")
         {
                 system("CLS");     
                 printf("\t\n\n BIENVEU DANS L' AIDE \n\n\n\n");     
         }


    même si j'entre "h1" la console n'affiche pas l'aide o_O


    La fonction

    void off ()
      {
       system("CLS");     
       printf("\n\n Le mot que vous avez entre est introuvable \n\n");
       printf(" Le programme va s'arreter \n\n\n\n\n");
       system("PAUSE");     
      }



    sera dévelopée plus tard
    et l'aide sera aussi développée plus tard ^^





    Mon fichier "main.c" :


    #include <stdio.h>
    #include <stdlib.h>
    #include "Prottotype.h"



    int main(int argc, char *argv[])
      {
     
      char principale [31] ;
      printf("\n\n\t -_-_-_-_- BIENVENU DANS LATIN+ -_-_-_-_- \n\n\n\n\n");
      printf("\tEntrez le mot a chercher ou tapez 'h1' pour avoir de l'aide \n\n\n\n");
      scanf("%s",principale);
      printf("\n\n\n");
      if(principale == "h1")
         {
                 system("CLS");     
                 printf("\t\n\n BIENVEU DANS L' AIDE \n\n\n\n");     
         }
      system("PAUSE");     
      return 0;
      }



    void off ()
      {
       system("CLS");     
       printf("\n\n Le mot que vous avez rentre est introuvable \n\n");
       printf(" Le programme va s'arreter \n\n\n\n\n");
       system("PAUSE");     
      }





    et mon fichier "Prottotype.h" :

    Le #ifndef verif , est un truc de M@teo pour ne pas inclure par erreur 2 fois le même fichier



    // Prottotypes et DEFINE



    #ifndef verif
    #define verif


    void off();


    #endif


    Et y a t-il une autre fonction ou autre chose pour remplacer les



    if (principale == LeMotLatin )
    {
     printf("LeMotLatin est à l'ind. présent ça veut dire TRADUCTION ... ");
    }



    Parceque avec cette technique je suis parti pour en mettre des milliers des
    "If ..." :lol:




    Merci d'avance



    PianoPâriss





    Secret (cliquez pour afficher)
    Le Site Du Zér0 est génial !!! :)

    • Partager sur Facebook
    • Partager sur Twitter
      24 février 2006 à 17:50:54

      Dans:

      scanf("%s",principale);


      Tu as oublié le "&" ;)
      Change cette ligne par cela:

      scanf("%s", &principale);


      Ca devrait marcher ^^
      • Partager sur Facebook
      • Partager sur Twitter
        24 février 2006 à 18:08:13

        Merci de ta réponse ( très rapide ) Amadeus :) :

        Mais apparament ça fonctionne toujour pas :(

        Je vais réessayer avec le "&"
        • Partager sur Facebook
        • Partager sur Twitter
          24 février 2006 à 18:17:47

          Grrrr...écoute pas c'qu'il dit lol! Une chaine de caracteres est un pointeur, il ne faut PAS mettre de "&". Je dirais plutôt qu'on ne peut pas mettre "if (maChaine == "truc")", donc moi je passe par strcmp, comme ça : "if (strcmp (maChaine, "truc") == 0)".
          • Partager sur Facebook
          • Partager sur Twitter
            24 février 2006 à 18:19:41

            Citation : Piano

            Merci de lie ce tuto. pour essayer de m'aider :)



            ce tuto? o_O ce post plutot non?

            et la reponse d'azerty est la bonne mais je me suis fait griller pour le dire :p
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              24 février 2006 à 18:59:31

              if(principale == "h1")
              Pas bon : pour comparer des chaînes, il faut utiliser strcmp.

              Et sinon après tu peux peut être déclarer un tableau constant qui contient tous les mots latins et leur traduction puis boucler et faire des strcmp. Ou créer un fichier "dictionnaire" qui contiendrait tous les mots mais comme ça serait un .txt tu pourrais en rajouter facilement.

              Au fait tu penses pas qu'un traducteur anglais serait plus facile ^^ j'ai eu en dernière heure de la semaine un cours de latin, dur dur :D rien qu'analyser le verde à partir de modèles de conjugaisons ou déclinaisons, tu en as pour des années de boulot :D fin bon là tu fais sans doute un truc plus simple ;)
              • Partager sur Facebook
              • Partager sur Twitter
                24 février 2006 à 19:12:33

                Merci Beaucoup pour les réponses :)

                J'avais oublié strcmp :p

                ( J'ai changé tuto. en post )

                et , si je veux faire un .txt je les mettrais comment les traductions des mots

                "Amo = j'aime ind. présent 1PS. V.A." par exemple ? et même si j'ai pas encore lu le Chap. sur les fichiers
                (Je le commence ) comment je fait pour qu'il reconnaisse la traduction et le mot ? o_O

                Je compte pas faire TOUS les mots Latin juste ceux que j'ai à connaitre cette année ou les verbes de base à tous les temps ; un truc pas trop complex :lol:

                Et un dernier petit truc , je sais que ça fait beaucoup mais bon ;

                Je sais plus comment faire par exemple si le mot est faut ==> Va vers la fonction " void off () " OU:
                Si principale == h1 ==> Va vers la fonction " long aide(int aidef) " ;
                je suppose qu'il y a aussi strcmp la dessous :lol:


                Oui je sais je suis débutant :p


                Je me disait aussi que le "&" était un peu bizzar mais j'ai quand même essayé :p !


                PianoPâriss
                • Partager sur Facebook
                • Partager sur Twitter
                  24 février 2006 à 19:50:23



                  if(strcmp(princpal,"h1")==0)
                  {
                  aide(aidef); // je sais pas c'est quoi ton "aidef"
                  }

                  if (strcmp(chaine,"bonne_reponse")!=0)
                  {
                  off();
                  }
                  else
                  { printf("bravo tu as bon");
                  }


                  Si j'ai bien compris ta question alors c'est aussi simple que ca.
                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 février 2006 à 20:52:35

                    Rebonjour ; ( Bonsoir )

                    "aidef" c'était une variable ; mais j'ai changé la fonction en " void aide() "
                    Je sais ça manque de commentaires . ^^

                    Ca fonctionne le

                    if(strcmp(princpal,"h1")==0)
                    {
                    aide(aidef); // je sais pas c'est quoi ton "aidef"
                    }

                    if (strcmp(chaine,"bonne_reponse")!=0)
                    {
                    off();
                    }
                    else
                    { printf("bravo tu as bon");
                    }


                    Même si je comprend pas trop pourquoi tu as mis : "Bonne_réponse" et "Bravo tu as bon" c'est pas grave , ça fonctionne :D

                    Est ce que quelqu'un sait comment faire avec un .txt externe pour que le programme comprenne que ça c'est la traduction et que ça c'est le mot en question ?

                    Merci pour toutes les réponses déja données . :)
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      24 février 2006 à 21:43:49

                      Tu vas sans doute devoir faire une lecture formattée. Par exemple dans ton fichier tu écris
                      amo aimer
                      venio venir
                      lego lire


                      Et après tu les lis avec un scanf :
                      char mot_latin[50];
                      char mot_francais[50];
                      fscanf (fichier, "%s %s", mot_latin, mot_francais);

                      Et ensuite tu fais les comparaisons qu'il faut, tes mos sont placés dans ta variable. Puis comme la lecture est formattée, tu peux ajouter d'autres informations aussi (inconvénient : un "mot" ne doit pas contenit d'espaces sinon fscanf considère qu'il y a deux mots). Puis tu peux créer un petit programme interactif qui écrit dans le fichier, ou le tri de temps en temps, enfin, tu as du boulot :D
                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 février 2006 à 11:18:36

                        Merci beaucoup des réponses ;

                        J'ai du boulot , comme tu dis :p

                        Je crois que je vais juste écrire les mots à connaître cette anée ; ce sera suffisant :lol:

                        Et 'mot_latin' contient quoi ? juste le premier mot du texte, elle ne sait pas contenir tous les mots du texte ?! o_O

                        Et pour les comparaisons je devrais aussi mettre des centaines de fois ??? o_O

                        if (strcmp (principale, "amo") == 0)
                            {
                            } 

                        Je suis pas super doué :p !
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          25 février 2006 à 11:46:52

                          Dans le code que j'ai donné, grâce au code de format de fscanf, tu auras normalement (si le fichier est bien écrit), le mot en latin dans mot_latin et le mot en français dans mot_francais.

                          Après, l'avantage du fichier et qu'il est extensible donc tu ne mets pas des milliers de strcmp mais une boucle, en fait dans la boucle, tu lis un nouveau mot en latin et en français, tu compares le mot latin au mot entré par l'utilisateur, puis si il est bon tu affiches le mot francais, sinon tu reboucles et relis le fichier, ça donne un code du genre :
                          char mot_latin[50];
                          char mot_francais[50];
                          while (feof (fichier))
                          {
                              fscanf (fichier, "%s %s", mot_latin, mot_francais);
                              if (strcmp (mot_latin, mot_entre) == 0)
                              {
                                  printf ("Traduction de %s : %s\n", mot_lain, mot_francais);
                                  break;
                              }
                          }

                          fichier est un FILE*, mot_entre est le mot entré par l'utilisateur. J'ai utilisé une boucle qui s'arrête soit quand elle touche la fin du fichier (mais je suis pas sûr que cette méthode soit bonne), ou quand on trouve le bon mot.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            25 février 2006 à 13:14:26

                            Merci de ta réponse "louisclem"

                            ça fonctionne ton

                            char mot_latin[50];
                            char mot_francais[50];
                            while (feof (fichier))
                            {
                                fscanf (fichier, "%s %s", mot_latin, mot_francais);
                                if (strcmp (mot_latin, mot_entre) == 0)
                                {
                                    printf ("Traduction de %s : %s\n", mot_lain, mot_francais);
                                    break;
                                }
                            }



                            Mais j'ai du changer le "feof"

                            while (feof (fichier))



                            en eof
                            while (eof (fichier))


                            Merci beaucoup mon programme fonctionne ; il me reste plus qu'à faire le dico. :p
                            (Ce ne sera pas de tout repos ! :lol: )



                            PianoPâriss
                            • Partager sur Facebook
                            • Partager sur Twitter
                              26 février 2006 à 11:57:44

                              Rebonjour

                              J'ai un dernier petit problème :honte::lol: :

                              Je n'arrive pas à "gérer" l'erreur, que, si le mot n'est pas dans le dictionnaire ,
                              il affiche : "le mot recherché n'est pas dans le dico."

                              j'ai essayé avec un 'else' mais il n'y a pas de 'if'.

                              Je vous rappele la partie du code concernée :

                              while (eof (fichier))
                              {
                                  fscanf (fichier, "%s %s",mot_latin ,mot_francais);
                                  if (strcmp (mot_latin, principale) == 0)
                                  {
                                      printf("Traduction de %s : %s\n\n\n\n\n\n", mot_latin, mot_francais);
                                      break;
                                  }
                              }   
                                             
                                   fclose(fichier);
                                  }
                                  else
                                  {
                                      printf("\n\nImpossible d'ouvrir le fichier dico.txt\n\n\n\n");
                                  }
                                   
                                printf("\nAu revoir");       
                                system("PAUSE>NUL")
                                return 0;
                                }
                               


                              "Principale" est la varible qui contient le mot entré ( recherché );

                              Il y a un "else" parceque , au début du programme il y a :

                                FILE* fichier = NULL;
                                fichier = fopen("dico.txt", "r+");
                                 
                                   if (fichier != NULL)
                                  {
                               



                              Merci d'avance des nouvelles réponses .
                              • Partager sur Facebook
                              • Partager sur Twitter
                              Anonyme
                                26 février 2006 à 12:13:28

                                Tu vas devoir utiliser une variable qui indique si le mot a été trouvé ou pas.

                                int trouve = 0; et dans le if, si on a trouvé le bon mot, on met cette variable à 1, sinon on y touche aps (elle reste à 0). A la fin de la boucle il suffit de regarder cette valeur. 1 : on a trouvé, 0 : toujours pas trouvé.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  26 février 2006 à 12:28:48

                                  Merci de m'avoir répondu aussi vite, louisclem ;

                                  Euh , j'ai pas compris , ou je mets la variable "trouve" dans la boucle ? o_O

                                  j'ai mis :

                                    int trouve = 0;


                                  et puis :

                                  while (eof (fichier))
                                  {
                                      fscanf (fichier, "%s %s",mot_latin ,mot_francais);
                                      if (strcmp (mot_latin, principale) == 0)
                                      {
                                       printf("Traduction de %s : %s\n\n\n\n\n\n", mot_latin, mot_francais);
                                       trouve = 1;
                                       break;
                                      }
                                  } 


                                  Mais je la mets comment dans la boucle ?

                                  Et je fais quoi si "trouve" et égal à zéro je mets le "printf" dans la boucle ? :euh:
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Anonyme
                                    26 février 2006 à 15:14:15

                                    Tu l'as bien placé là ;) en fait, à la sortie de la boucle, tu vois, il vaudra 1 si on a bien trouvé ou 0 si il n'a rien trouvé (il aura parcouru toute la boucle sans modifier la variable). Donc à la fin il suffit de rajouter :
                                    if (trouve == 1)
                                    {
                                        printf ("Le mot a bien ete trouve.\n");
                                    }
                                    else
                                    {
                                        printf ("Le mot n'est pas dans le dictionnaire.\n");
                                    }
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      26 février 2006 à 17:08:28

                                      Ca ne fonctionne pas !!! o_Oo_Oo_O

                                      j'ai constaté que le problème venait de la boucle ;

                                      j'ai fait ça :

                                      while (eof (fichier))
                                      {
                                          fscanf (fichier, "%s %s",mot_latin ,mot_francais);
                                          if (strcmp (mot_latin, principale) == 0)
                                          {
                                              printf("Traduction de %s : %s\n\n\n\n", mot_latin, mot_francais);
                                              trouve = 1;
                                              break;
                                          }
                                      }       
                                          printf(" %ld",trouve)
                                          if(trouve == 0)
                                          {
                                            printf("\nLe mot n'est pas dans le dictionnaire.\n");
                                          }


                                      et la console m'affiche :

                                      Image utilisateur

                                      j'ai entré n'importe quoi ; le programme ne sort pas de la boucle , il n'affiche pas le
                                      printf(" %ld",trouve);


                                      Parce que dans la boucle tu avais mis
                                      while (feof (fichier))


                                      et là , le programme me disait toujours que le mot était introuvable ; j'ai changé en
                                      while (eof (fichier))

                                      et là ça fonctionne ( quand le mot est juste :lol: ) mais quand le mot n'est pas juste ... :D , alors il ne sort plus de la boucle ! o_O ; il boucle , boucle ; boucle infinie ! :p


                                      Je sais , je suis ennervant ; il y a toujours des problèmes en C n'est ce pas ? :p
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Anonyme
                                        26 février 2006 à 19:30:55

                                        Bouh j'ai fait une erreur : feof retourne vrai quand la fin de fichier est rencontré donc dans la boucle on met
                                        while (!feof (fichier))
                                        et pas
                                        while (feof (fichier))

                                        Citation : PianoPâriss

                                        il y a toujours des problèmes en C n'est ce pas ?


                                        En effet :p c'est fait pour ça :D
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          26 février 2006 à 19:43:26

                                          Oui , ça fonctionne ( ça à l'air de fonctionner :p ) ;

                                          je vais agrandir le programme ; il pourra y avoir plusieurs dico. etc.

                                          Quand même , pour un *bête* point d'exlamation ! :lol:

                                          Merci Louisclem

                                          A++


                                          PianoPâriss
                                          • Partager sur Facebook
                                          • Partager sur Twitter

                                          Problème de variables

                                          × 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