IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Dictionnaire en C


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 16
    Par défaut Dictionnaire en C
    Bonjour à tous,
    j'ai eu envie de programmer un dictionnaire en C, seulement moncode ne fonctionne pas correctement. Il n'y a pas d'erreur lors de la compilation, mais lorsqu'il faut entrer un mot pour avoir sa traduction, cela ne fonctionne pas.
    Mon programme demande le mot(ex:sleep) et en principe donne la traduction(dormir). Or mon fichier texte qui me sert à aller chercher le mot en francais commence par "abide demeurer" et lors de l'affichage de la traduction:
    "Quel est le mot en Anglais? sleep"
    "La traduction de abide=urer".
    Il y a un problème lors de la recherche de chaîne et de l'affichage.
    Voila mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main(int argc, char *argv[])
    {
        FILE *fichier=NULL;
        int premierChoix=0, choixFin=0, nombreDeLettreDuMot=0, nombreDeLettreServant=0;
        char motFrancais[100], motAnglaisEntre[100], motAnglaisCherche[100], motTrouve[100];
     
        do
        {
             printf("Bienvenu dans ce programme de traduction Francais Anglais\n");
             printf("Traduction de l'Anglais au Francais\nTapez 1\nDu Francais a l'Anglais\nTapez 2\n");
             printf("Quel est vote choix?\n");
             scanf("%ld",&premierChoix);
     
             if(premierChoix==1)
             {
                                printf("Veuillez entrer le mot Anglais: ");
                                scanf("%s", motAnglaisEntre);
                                nombreDeLettreDuMot = strlen(motAnglaisEntre);
     
     
                                fichier=fopen("dicoANG.txt", "r");
                                if(fichier!=NULL)
                                {
     
                                                 fscanf(fichier, "%s", motAnglaisCherche);                                             
                                                 nombreDeLettreServant=nombreDeLettreDuMot--;
                                                 fseek(fichier, nombreDeLettreServant, SEEK_CUR);
                                                 fgets(motTrouve, 100, fichier);
                                                 printf("Traduction de %s en Francais= %s\n", motAnglaisEntre, motTrouve);
                                                 }
     
                                else
                                {
                                    printf("Erreur d'ouverture de <dicoANG.txt>\n");
                                    }
                                    }
             else if(premierChoix==2)
             {
                  printf("Entrez le mot Francais: ");
                  scanf("%s", motFrancais);
                  nombreDeLettreDuMot = strlen(motFrancais);
                  printf("nombre de lettre:%ld\n", nombreDeLettreDuMot);
     
                  fichier=fopen("dicoFR.txt", "r");
                  if(fichier!=NULL)
                  {
                                   fscanf(fichier, "%s", motFrancais);
                                   nombreDeLettreServant=nombreDeLettreDuMot--;
                                   fseek(fichier, nombreDeLettreServant, SEEK_CUR);
                                   fgets(motTrouve, 100, fichier);
                                   printf("Traduction de %s en Anglais= %s\n", motFrancais, motTrouve);
                                   }
                  else
                  {
                      printf("Erreur d'ouverture de <dicoFR.txt>\n");
                      }
                      }
             else
             {
                 printf("Entrez un n° correct SVP\n");
                 }
     
                 printf("Voulez vous quitter?\n 1=OUI\n 2=NON\n");
                 printf("Choix: ");
                 scanf("%ld",&choixFin);
                 }while(choixFin==2);
     
     
      return 0;
    }
    J'ai essayer une boucle au niveau du fscanf mais ça n'a pas marché, je n'esperais pas trop non plus ^^
    Merci de votre aide.

  2. #2
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par gaara
    j'ai eu envie de programmer un dictionnaire en C, seulement moncode ne fonctionne pas correctement. Il n'y a pas d'erreur lors de la compilation,
    Déjà, il faudrait corriger ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums2\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `main':
    main.c:16: warning: long int format, int arg (arg 2)
    main.c:46: warning: long int format, int arg (arg 2)
    main.c:69: warning: long int format, int arg (arg 2)
    main.c: At top level:
    main.c:5: warning: unused parameter 'argc'
    main.c:5: warning: unused parameter 'argv'
    Linking console executable: C:\dev\forums2\console.exe
    Process terminated with status 0 (0 minutes, 6 seconds)
    0 errors, 5 warnings
    C'est pas trop méchant (bug grave en 16-bit quand même...), mais autant faire bien toute suite...

    Ensuite, tu balances un code, OK. Il a comportement bizarre, OK. Mais quelles sont les études préalables qui ont été menées ? Comment savoir si l'erreur est due au codage ou à la conception voire à la spécification ? As-tu bien fait les chose 'dans l'ordre' avant de te ruer sur le clavier ?

    Je veux bien passer un peu de temps sur le codage, mais si je tombe sur une erreur de conception ou une incohérence de spécification, je ne vais pas être content...

    ANALYSE INTERROMPUE.
    • Spécifications
      Rien concernant la sécurité des entrées.
      Pas d'indication sur la structure du fichier
    • Conception
      Menus améliorables : 1-A>F 2-F>A 3 Quitter
      Méthode de recherche incompréhensible
    • Codage
      Usage incorrect et dangereux de scanf(). En cas d'erreur de frappe, le comportement est indéterminé. Les entrées doivent être sécurisées.
      Lignes trop longues.
      Usage injustifié de if-else-if au lieu de switch-case

    Bon, ben voila. Je ne suis pas content.

    Il est impossible de savoir si ce code a une chance de fonctionner, car on ne sait rien des fichiers, et on a même pas d'exemple...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 16
    Par défaut
    Désolé de ne pas m'y connaitre autant que toi en programmation, si je posedes questions c'est pour m'améliorer et, je pense, que le codage d'un petit dictionnaire m'en fait apprendre beaucoup sur les manipulations de chaînes.
    Je n'ai pas tout compris dans ta réponse, et pour répondre à ta question j'ai d'abord codé le programme par écrit sur une feuille, l'amélioré ensuite, et enfin "me ruer se le clavier". Au moment de la 1ere compilation j'ai rencpontré quelques problèmes que j'ai résolu mais d'autres plus importants (l'affichage de la traduction) sont apparus.
    Si je post un message sur ce forum en disant que j'ai un problème de code, c'est que, avant de poster, j'ai effectué mes propres recherches sur le sujet mais n'ai rien trouvé.
    Après si tu es là pour "m'engueuler" parce que mon code n'est pas bon au lieu de m'expliquer en quoi il est mauvais pour me faire progresser c'est ton choix, moi j'espérais trouver une aide concrète.
    Si tu veux quand même continuer à m'aider, il y quelque trucs que je n'ai pas saisis dans ton post:
    "Il est impossible de savoir si ce code a une chance de fonctionner, car on ne sait rien des fichiers, et on a même pas d'exemple" comment ça on sait rien des fichiers?
    "Analyse interrompue", je n'ai pas compris ce que signifiait les 3 points qui suivaient.
    Merci quand même d'avoir répondu, j'espère continuer à bénéficier de ton aide.

  4. #4
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par gaara
    Désolé de ne pas m'y connaitre autant que toi en programmation, si je posedes questions c'est pour m'améliorer et, je pense, que le codage d'un petit dictionnaire m'en fait apprendre beaucoup sur les manipulations de chaînes.
    Je pense qu'il faut très vite différencier l'approche scolaire qui consiste à se concenter sur UN problème de base du langage (les fonctions, les tableaux, les pointeurs, les chaines, les fichiers, la programmation modulaire etc.) et à essayer de le maitriser le plus possible, et l'approche réelle qui consiste à réaliser un projet en utilisant des techniques éprouvées (au moyen des exercices précédents).

    Donc ta déclaration initiale "j'ai eu envie de programmer un dictionnaire en C" montre à l'évidence que cette notion de "projet réel" n'est pas claire pour toi. En effet, dans un projet réel, les détails d'implémentation comme 'en langage C'
    • n'intéressent personne
    • sont sous-entendus ici, puisque tu postes sur un forum dédié au langage C.

    De plus, ta réponse "je pense, que le codage d'un petit dictionnaire m'en fait apprendre beaucoup sur les manipulations de chaînes." de fait que confirmer que tu confonds exercice et projet. Donc je me permets d'insister. C'est comme ça.

    Ceci posé, il s'agit donc d'un projet, ce qui impose certaines regles de conduite, comme le respect de la séquence Définition, Conception, Réalisation (strict minimum requis et commun à n'importe quelle méthode de développement formelle ou non).
    Je n'ai pas tout compris dans ta réponse, et pour répondre à ta question j'ai d'abord codé le programme par écrit sur une feuille, l'amélioré ensuite, et enfin "me ruer se le clavier". Au moment de la 1ere compilation j'ai rencpontré quelques problèmes que j'ai résolu mais d'autres plus importants (l'affichage de la traduction) sont apparus.
    Très bien. Tu dois donc être en mesure de nous fournir le document de spécification et le document de conception qui nous permettrons de vérifier si le codage est conforme à la conception, si le comportement est conforme à la spécification, comment sont définis les fichiers de données et sur quoi repose le mécanisme de recherche... En attendant, personnellement, je ne sais pas corriger ton code.
    Si je post un message sur ce forum en disant que j'ai un problème de code, c'est que, avant de poster, j'ai effectué mes propres recherches sur le sujet mais n'ai rien trouvé.
    Un fichier 'dictionnaire à 2 entrées, c'est pas le bout du monde non plus. Encore faut-il bien définir et bien concevoir la chose. Moi, j'ai pas compris pourquoi il y avait 2 fichiers. (En en plus, ils ne sont pas sur ma machine, donc je ne peux rien tester...)
    Après si tu es là pour "m'engueuler" parce que mon code n'est pas bon au lieu de m'expliquer en quoi il est mauvais pour me faire progresser c'est ton choix, moi j'espérais trouver une aide concrète.
    Si tu prends mes remarques, que j'essaye d'être constructives et réalistes, comme des 'engueulades', je ne peux rien pour toi.

    C'est à toi d'apprendre à gérer ça. Peut être que personne n'a jamais commenter ton travail, je ne connais pas ton histoire et ce n'est pas le sujet. En tout cas, sache qu'ici, comme sur les forums techniques en général, on ne manie pas la langue de bois et que si quelque chose ne va pas, on le dit. Un forum c'est fait pour ça.
    Si tu veux quand même continuer à m'aider, il y quelque trucs que je n'ai pas saisis dans ton post:
    "Il est impossible de savoir si ce code a une chance de fonctionner, car on ne sait rien des fichiers, et on a même pas d'exemple" comment ça on sait rien des fichiers?
    Ben y'a quoi dedans ? On a pas d'exemple ni de lien...
    "Analyse interrompue", je n'ai pas compris ce que signifiait les 3 points qui suivaient.
    Erreur de ma part. Corrigé.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 16
    Par défaut
    J'ai mis en pièce jointe la partie du dictionnaire que j'ai pour le moment et qui me sert à tester mon programme. C'est une liste de verbes Anglais>Francais.
    En gros voici comment le programme devrait réagir:
    -Pour une traduction de l'Anglais au Francais:
    1°)Demande du mot en Anglais à traduire
    2°)Recherche du mot Anglais dans le fichier texte
    3°)Une fois le mot Anglais trouvé, déplacer le curseur d'une mesure vers la doite (dans mon fichier texte "dicoANG", un espace sépare le mot Anglais du mot Francais)
    4°)Déplacer le curseur jusqu'au saut de ligne (la fin du mot Francais) en stockant au fur et à mesure du déplacement chacunes des lettres du mot Francais dans un tableau de char
    5°)Afficher le contenu du tableau de char contenant le mot Francais à l'écran.

    Comme tu l'as dit, m'a vie n'est pas le sujet de ce post loin de la, seulement j'aimerais te préciser une chose sur moi, c'est que j'ai commencé à apprendre le langage C il y a un peu plus d'un an, donc je n'ai que mes connaissance acquise par ce biais et c'est pour cela que je m'entraine à coder des programmes pour me rentrer les fonctions dans la tete, car comme le dit mon prof de math, il n'y a qu'avec des exercices qu'on est sur d'avoir compris le cours.
    Il y a quelques mois, j'ai codé une petite calculatrice sous dos ce qui m'a permis d'affirmer mes connaissance en "manipulation de nombres" si je puis dire. Maintenant je m'attaque aux chaînes et plus tard à la SDL et gestion des événements.
    Désolé pour ce petit interlude mais j'avais envi que tu sache pourquoi je fais ça. Ce n'est que pour moi et non pour une école.
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par gaara
    J'ai mis en pièce jointe la partie du dictionnaire que j'ai pour le moment et qui me sert à tester mon programme. C'est une liste de verbes Anglais>Francais.
    OK, ça va aider...
    En gros voici comment le programme devrait réagir:
    -Pour une traduction de l'Anglais au Francais:
    1°)Demande du mot en Anglais à traduire
    2°)Recherche du mot Anglais dans le fichier texte
    3°)Une fois le mot Anglais trouvé, déplacer le curseur d'une mesure vers la doite (dans mon fichier texte "dicoANG", un espace sépare le mot Anglais du mot Francais)
    4°)Déplacer le curseur jusqu'au saut de ligne (la fin du mot Francais) en stockant au fur et à mesure du déplacement chacunes des lettres du mot Francais dans un tableau de char
    5°)Afficher le contenu du tableau de char contenant le mot Francais à l'écran.
    OK. Ceci ressemble à une spécification (quoi) avec des traces de conception (comment). Il faudrait déjà commencer par apprendre à bien séparer les deux...

    On pourrait déjà apporter quelques commentaire sur la façon de réaliser une interface utilisateur (simplifier les menus, par exemple).

    Je dois partir, là, je ne peux pas poursuivre avant ce soir tard ou demain matin...

    Mais le sujet est intéressant et mérite d'être traité 'selon les règles'.

    Tu peux lire ça en attendant : http://bien-programmer.blogspot.com/

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 16
    Par défaut
    Je te remerci

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 16
    Par défaut recherches éffectuées
    J'ai efféctué des recherches et j'ai modifier mon code.
    Le voici, il contient encore une erreur au niveau du fseek et du fgets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int main(int argc, char *argv[])
    {
        FILE *fichier=NULL;
        int premierChoix=0, choixFin=0, nombreDeLettreDuMot=0, nombreDeLettreServant=0;
        char motFrancais[100], motAnglaisEntre[100], motAnglaisCherche[100], motTrouve[100];
     
        do
        {
             printf("Bienvenu dans ce programme de traduction Francais Anglais\n");
             printf("Traduction de l'Anglais au Francais\nTapez 1\nDu Francais a l'Anglais\nTapez 2\n");
             printf("Quel est vote choix?\n");
             scanf("%ld",&premierChoix);
     
             if(premierChoix==1)
             {
                                printf("Veuillez entrer le mot Anglais: ");
                                scanf("%s", motAnglaisEntre);
                                nombreDeLettreDuMot = strlen(motAnglaisEntre);
                                printf("la chaine contient %s\n", motAnglaisEntre);
     
     
                                fichier=fopen("dicoANG.txt", "r");
                                if(fichier!=NULL)
                                {
                                                 while(fscanf(fichier, "%s", motAnglaisCherche)!=EOF)
                                                 {                                                                                      
                                                 nombreDeLettreServant=nombreDeLettreDuMot+1;
                                                 fseek(fichier, nombreDeLettreServant, SEEK_CUR);
                                                 }
                                                 fgets(motTrouve, 100, fichier);
                                                 printf("Traduction de %s en Francais= %s\n", motAnglaisEntre, motTrouve);
                                                 }
     
     
                                else
                                {
                                    printf("Erreur d'ouverture de <dicoANG.txt>\n");
                                    }
                                    }
             else if(premierChoix==2)
             {
                  printf("Entrez le mot Francais: ");
                  scanf("%s", motFrancais);
                  nombreDeLettreDuMot = strlen(motFrancais);
                  printf("nombre de lettre:%ld\n", nombreDeLettreDuMot);
     
                  fichier=fopen("dicoFR.txt", "r");
                  if(fichier!=NULL)
                  {
                                   fscanf(fichier, "%s", motFrancais);
                                   nombreDeLettreServant=nombreDeLettreDuMot--;
                                   fseek(fichier, nombreDeLettreServant, SEEK_CUR);
                                   fgets(motTrouve, 100, fichier);
                                   printf("Traduction de %s en Anglais= %s\n", motFrancais, motTrouve);
                                   }
                  else
                  {
                      printf("Erreur d'ouverture de <dicoFR.txt>\n");
                      }
                      }
             else
             {
                 printf("Entrez un n° correct SVP\n");
                 }
     
                 printf("Voulez vous quitter?\1=OUI\n2=NON\n");
                 printf("Choix: ");
                 scanf("%ld",&choixFin);
                 }while(choixFin==2);
     
     
      return 0;
    }
    Maitenant la console affiche:
    code console:
    -choix de la traduction francais>anglais ou anglais>francais
    //Je choisi anglais>francais
    -Entrer le mot anglais://j'écrit sleep"sleep
    //vérification que la chaîne contient bien sleep
    -La chaine contient sleep
    -Traduction de sleep en francais=//Là il y a des symboles bizzards, une sorte de "e", un as de pique, et le symbole "$".

    Il affiche cette "traduction" pour n'importe quel mot demandé.

  9. #9
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    Ce que je te porposerais, c'est déjà de diviser ton code...

    Tu pourrais ainsi en arriver à une fonction main beaucoup plus simple, du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    int main(int argc, char *argv[])
    {
        char chaine[20];
        int choix;
        do
        {
            printf("1- traduction Francais>Anglais\n");
            printf("2- traduction Anglais > Francais\n");
            printf("3- Quitter\n");
            printf("Votre choix :");
            if(fgets(chaine,sizeof(chaine),stdin)!=NULL)
            {
                choix=atoi(chaine);
                switch(choix)
                {
                    case 1:
                        EnglishToFrench();
                        break;
                    case 2:
                        FrenchToEnglish();
                        break;
                    case 3: /* ne fait rien, mais permet d'avoir une valeur par
                               défaut*/
                        break;
                    default:
                        printf("Veuillez choisir uniquement 1,2 ou 3\n");
                }
            }
        }while(choix!=3);
    }
    Tu aurais donc une fonction qui fournirait la traduction Anglais->Francais (ici EnglishToFrench) et une autre qui fournirait la traduction Francais->Anglais(ici FrenchToEnglish)

    Evidemment, il pourrait s'avérer intéressant d'avoir également une fonction séparée pour la lecture dans le fichier...

    Au final, tu aura un code beaucoup plus facilement maintenable, et d'un débugage plus simple...

    [EDIT]
    Mieux encore, tu pourrais arriver à un main sous la forme de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    int main(int argc, char *argv[])
    { 
        int choix;
        do
        {
            menu();
            switch(choix)
            {
                case 1:
                    EnglishToFrench();
                    break;
                case 2:
                    FrenchToEnglish();
                    break;
                case 3: /* ne fait rien, mais permet d'avoir une valeur par
                         défaut*/
                    break;
                default:
                    printf("Veuillez choisir uniquement 1,2 ou 3\n");
            }
        }while(choix!=3);
    }
    avec une fonction menu() du genre de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    int menu()
    {
        char chaine[20];
        int choix;
        printf("1- traduction Francais>Anglais\n");
        printf("2- traduction Anglais > Francais\n");
        printf("3- Quitter\n");
        printf("Votre choix :");
        if(fgets(chaine,sizeof(chaine),stdin)!=NULL)
        {
            choix=atoi(chaine);
        }
        return choix;
    }
    [/EDIT]
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par gaara
    J'ai efféctué des recherches et j'ai modifier mon code.
    <...>
    Déjà, tu peux corriger ça, ça rendra ton code plus portable...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Project   : Forums
    Compiler  : GNU GCC Compiler (called directly)
    Directory : C:\dev\forums2\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `main':
    main.c:16: warning: long int format, int arg (arg 2)
    main.c:49: warning: long int format, int arg (arg 2)
    main.c:72: warning: long int format, int arg (arg 2)
    main.c: At top level:
    main.c:5: warning: unused parameter 'argc'
    main.c:5: warning: unused parameter 'argv'
    Linking console executable: C:\dev\forums2\console.exe
    Process terminated with status 0 (0 minutes, 7 seconds)
    0 errors, 5 warnings
    fseek() ne fonctionne pas de façon portable sur les fichier ouverts en mode texte.

    Ensuite, pour continuer sur l'idée de koala01, il faut apprendre à séparer les traitements des données, et utiliser des fonctions avec des paramètres. Il est extrêmement choquant pour un informaticien de voir du code quasiment 'doublé' comme ça... Il y a de la factorisation dans l'air...

    L'idée, c'est que le nombre de bugs est proportionnel au nombre de lignes de code...

    Si j'en crois le format du fichier que tu utilises
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    abide demeurer
    arise se lever
    awake s'éveiller
    be être
    déjà, il y a un problème, car on ne sait pas comment sont séparés les mots français des mots anglais.

    En effet :
    est ambigu. En effet, une machine est idiote et elle ne sait pas dire si le mot anglais est 'arise' ou si c'est 'arise se'.

    Il faudrait déjà commencer par soit simplifier la règle en imposant un format à 2 mots :
    soit définir un format universel comme CSV, par exemple :
    mais qui est un peu plus complexe à traiter.

    Avant toute chose, il faut définir clairement une ligne de fichier

    Ensuite, pour le traitement, il suffit de lire le fichier ligne à ligne, d'analyser la ligne (trouver mot cherché : strstr(), si trouvé : afficher le mot correspondant...)

    Bref, comme toujours, si la spécification n'est pas bonne, on va dans le mur...

Discussions similaires

  1. dictionnaire de données
    Par samiroquai dans le forum Schéma
    Réponses: 16
    Dernier message: 17/07/2008, 01h40
  2. Un fichier dictionnaire ?
    Par portu dans le forum Windows
    Réponses: 6
    Dernier message: 17/04/2007, 15h26
  3. Dictionnaire locales centralisé
    Par Jeweller dans le forum XMLRAD
    Réponses: 5
    Dernier message: 14/01/2005, 16h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo