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 :

Faire un Dictionnaire en C. Comment faire?


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Par défaut Faire un Dictionnaire en C. Comment faire?
    Bonjour a tous,
    J'aimerais realiser un dictionnaire en C/C++ dans une console.
    La console est sur fond noire, avec des ecritures rouges ( ça je sais le faire il n'y a pas de probleme.
    Je veux que l'utilisateur rentre un mot et que lorsqu'il tape entrer, une definition s'affiche.
    Je suis désolé si un cas comme ceci a deja été traité, mais je ne trouve pas la fonction recherche.

    Je suis sous XP, j'apprends en ce moment la programmation.
    Voici mon code source:

    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
    /* DictionarY  Of My PsP By OverdrivE commencé le 8/06/07 a 2h36 du matin et terminé le */
    #include <stdio.h>
    #include <stdlib.h>
     
     
     
     
     
    int main(int argc, char *argv[])
    {
     
      char mot[100];
      system("color c"); /* couleur de texte rouge */
      printf("                #############################################\n                ##                                         ##\n                ##   Bienvenue sur  DictionarY Of My Psp   ##\n                ##                version 0.5              ##\n                ##                                         ##\n                #############################################");
      printf("\n\n\n\n\n\n\n\n\nCe programme va vous aider a mieux connaitre le vocabulaire specifique a la psp.");
      printf("\n\nTapez un seul mot sans accent:  ");
      scanf("%s[a-zA-Z]", &mot); // On demande d'entrer le mot
      printf("\n\nvous avez selectionne le mot %s \n\n", mot);
     
     
      system("PAUSE");	
      return 0;
    }
    Voilà, pouvez-vous me dire comment remedier a ce probleme? Par avance, merci
    A+, overdrive77310.

    P.S: Je suis désolé si je postes au mauvaise endroit.

    Edit: C'est pour faire un dictionnaire du vocabulaire de la PSP si ça peut vous aider.

  2. #2
    Membre chevronné Avatar de icer
    Inscrit en
    Janvier 2006
    Messages
    332
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 332
    Par défaut
    Je te propose une solution :

    Tu édite un fichier texte dans un format qui te permet de faire deux champs :
    - Un champ pour le mot
    - Un autre champ pour la définition du mot

    Tu définies un séparateur, par exemple une tabulation.

    Tu écries toutes tes définitions de mots dans ce fichier texte en respectant ton format. Ce fichier sera ton dictionnaire
    Par exemple une ligne de ce dictionnaire serait :
    psp <tabulation> La psp est une console portable crée par Sony.

    Ensuite dans ton programme, aprés que ton utilisateur ait entré le mot.
    Tu ouvre ton dictionnaire avec la fonction fopen
    tu parcoure ton fichier en testant à chaque ligne si le mot correspond à celui de ton utilisateur.
    Si le mot correspond, tu l'affiche avec sa description.

    Et n'oublie pas de fermer ton fichier avec la fonction fclose

    Si aprés avoir parcourue tout ton dictionnaire, le mot n'a pas été trouvé, et ben tu affiche un message à l'utilsateur pour le lui signaler.

    En espérant que ça peut t'aider

  3. #3
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Par défaut
    Ok, merci de ta reponse, j'ai reussis a lancer mon fichier contenant les definitions, et a fermer cette fonction.
    Il faut maintenant que j'utilise la fonction fread ( je crois) pour affichier la definition, mais malheuresement j'ai cherché pendant 1 heure et je n'ai pas trouvé .
    Pouvez-vous m'aider?

    Je mets mon nouveau code source:

    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
    /* DictionarY  Of My PsP By OverdrivE commencé le 8/06/07 a 2h36 du matin et terminé le */
    #include <stdio.h>
    #include <stdlib.h>
     
     
     
     
     
    int main(int argc, char *argv[])
    {
     
      char mot[100];
      system("color c"); // couleur de texte rouge
      printf("                #############################################\n                ##                                         ##\n                ##   Bienvenue sur  DictionarY Of My PsP   ##\n                ##                version 0.5              ##\n                ##                                         ##\n                #############################################");
      printf("\n\n\n\n\n\n\n\n\nCe programme va vous aider a mieux connaitre le vocabulaire specifique a la psp.");
      printf("\n\nTapez un seul mot sans accent:  ");
      scanf("%s", &mot); // On demande d'entrer le mot
      printf("\n\nvous avez selectionne le mot %s \n\n", mot);
      fopen("definitions.txt","r");
      //ajouter le fread
      fclose;
     
     
     
      system("PAUSE");	
      return 0;
    }
    Voici ce qui est marqué dans le dossier definitions.txt
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    psp	la psp est une console cree par sony.
    J'ai choisis une tabulation comme separateur, mais je pense que je vais choisir ce caractére ":" avec un espace aprés, est-ce que je peux?

    Par avance, merci.
    A+, overdrive77310.

  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 overdrive77310
    Bonjour a tous,
    J'aimerais realiser un dictionnaire en C/C++
    N'existe pas. C et C++ sont des langages différents. Il faut que tu choisisses quel langage tu utilises et que tu pose ta question sur le forum adéquate.

    Faire une saisie, c'est sérieux. Je te conseille de partir sur de meilleures bases :
    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
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
     
    /* DictionarY  Of My PsP By OverdrivE
       commencé le 8/06/07 a 2h36 du matin
       et terminé le
    */
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    int clean (char *s)
    {
       int err;
       /* search ... */
       char *p = strchr (s, '\n');
       if (p != NULL)
       {
          /* ... kill */
          *p = 0;
          err = 0;
       }
       else
       {
          /* purge */
          int c;
          while ((c = getchar ()) != '\n' && c != EOF)
          {
          }
          err = 1;
       }
       return err;
    }
     
    int main (void)
    {
       char mot[32];
       printf
          ("                #############################################\n"
           "                ##                                         ##\n"
           "                ##   Bienvenue sur  DictionarY Of My Psp   ##\n"
           "                ##                version 0.5              ##\n"
           "                ##                                         ##\n"
           "                #############################################\n");
       printf
          ("\n\n\n\n\n\n\n\n"
           "Ce programme va vous aider a mieux connaitre le vocabulaire specifique a la psp.\n");
       printf ("\nTapez un seul mot sans accent:  ");
       fflush (stdout);
     
       {
          int err;
          do
          {
             char line[sizeof mot + 1];
             do
             {
                /* On demande d'entrer le mot */
                fgets (line, sizeof line, stdin);
     
                /* nettoyage de la ligne saisie */
                err = clean (line);
     
                /* evaluation de l'erreur */
                if (err)
                {
                   printf ("ERR : Saisie trop longue\n");
                }
             }
             while (err);
     
             {
                /* controle du domaine des caracteres */
                int n = sscanf (line, "%[a-zA-Z0-9]s", mot);
     
                /* evaluation de l'erreur */
                err = n != 1 || strlen (line) != strlen (mot);
                if (err)
                {
                   printf ("ERR : Caracteres errones\n");
                }
             }
          }
          while (err);
       }
       printf ("\n\nVous avez selectionne le mot '%s' \n\n", mot);
     
       return 0;
    }
    Pose des questions si tu ne comprends pas

    (et ne perds pas ton temps a mettre de la couleur. C'est laid et pas portable...)

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Par défaut
    C et C++ sont des langages différents.
    Je sais, je demandais justement en quel language il été preferable (plus simple?) de le faire. Je penses que le C est un bon commencement.

    J'essais d'analyser un peu ton code, dis moi si j'ai faux STP.

    Jvais deja le compiler pour voir ce que ça donne et je te dit aprés.


    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
    int clean (char *s)
    {
       int err;
       /* search ... */
       char *p = strchr (s, '\n');
       if (p != NULL)
       {
          /* ... kill */
          *p = 0;
          err = 0;
       }
       else
       {
          /* purge */
          int c;
          while ((c = getchar ()) != '\n' && c != EOF)
          {
          }
          err = 1;
       }
       return err;
    }
    ça, si j'ai bien compris, c'est la boucle pour chercher l'erreur. J'ai pas trop compris les truc dedans mais bon :s.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int main (void)
    {
       char mot[32];
       printf
          ("                #############################################\n"
           "                ##                                         ##\n"
           "                ##   Bienvenue sur  DictionarY Of My Psp   ##\n"
           "                ##                version 0.5              ##\n"
           "                ##                                         ##\n"
           "                #############################################\n");
       printf
          ("\n\n\n\n\n\n\n\n"
           "Ce programme va vous aider a mieux connaitre le vocabulaire specifique a la psp.\n");
       printf ("\nTapez un seul mot sans accent:  ");
    D'aprés ce que j'ai compris, jusque la ça affiche le titre ( je cherchais comment le faire comme ça car pour faire le cadre a la façon que j'avais fais, c'est un peu galére, merci), ça dit: ce programme va.... et tapez un seul mot...
    ça dit que le MOT ne fait pas plus de 32 caractere.

    ça je ne comprends pas.


    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
    {
          int err;
          do
          {
             char line[sizeof mot + 1];
             do
             {
                /* On demande d'entrer le mot */
                fgets (line, sizeof line, stdin);
     
                /* nettoyage de la ligne saisie */
                err = clean (line);
     
                /* evaluation de l'erreur */
                if (err)
                {
                   printf ("ERR : Saisie trop longue\n");
                }
    Là, je crois que ça demande le mot, regarde si il y a une erreur et si il y a une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
             }
             while (err);
     
             {
    Je n'est pas trop compris comment marche la fonction fgets, il va falloir que j'analyse un peu plus.

    aprés le reste, c'est facil a comprendre, j'ai juste rajouté un system("pause"); a la fin du programme.

    Le probleme, c'est que maintenant, je ne sais pas comment continuer, afficher la definition du mot tapé, je peux faire pareil, en ouvrant un fichier texte?

  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 overdrive77310
    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
    int clean (char *s)
    {
       int err;
       /* search ... */
       char *p = strchr (s, '\n');
       if (p != NULL)
       {
          /* ... kill */
          *p = 0;
          err = 0;
       }
       else
       {
          /* purge */
          int c;
          while ((c = getchar ()) != '\n' && c != EOF)
          {
          }
          err = 1;
       }
       return err;
    }
    ça, si j'ai bien compris, c'est la boucle pour chercher l'erreur. J'ai pas trop compris les truc dedans mais bon :s.
    Il faut connaitre le fonctionnement de fgets()... C'est un mécanisme de nettoyage de la ligne saisie et de détection d'erreur (taille trop petite).

    http://emmanuel-delahaye.developpez....tes.htm#saisie
    http://emmanuel-delahaye.developpez....s.htm#fichiers

    ça dit que le MOT ne fait pas plus de 32 caractere.
    ... avec le 0 final, soit 31 utiles.
    ça je ne comprends pas.
    http://emmanuel-delahaye.developpez....#fflush_stdout
    Le probleme, c'est que maintenant, je ne sais pas comment continuer, afficher la definition du mot tapé, je peux faire pareil, en ouvrant un fichier texte?
    Absolument. (Enfin quelque chose qui ressemble).

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 35
    Par défaut
    Est-ce que la fonction a utiliser pour afficher une ligne est bien fread?
    Car je ne veux pas afficher tout le document texte ^^.
    Aurais-tu un cours pour utiliser la fonction fread car sur ton site, tu parles vaguement de la fonction fread pour lire un fichier, a moin que j'ai raté quelque chose, si c'est le cas j'en suis désolé.

    Merci,a+, overdrive77310.

  8. #8
    Membre éprouvé Avatar de psyphi
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2006
    Messages : 119
    Par défaut
    Est-ce que la fonction a utiliser pour afficher une ligne est bien fread
    Non! La fonction fread lit un nombre d'éléments (que tu dois définir) dans un fichier.

    Page de manuel de fread

  9. #9
    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 overdrive77310
    Est-ce que la fonction a utiliser pour afficher une ligne est bien fread?
    Pour afficher une ligne,c'est puts() ou printf(). Pour lire une ligne, c'est fgets(). Relis bien mon article.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2003] je voulais faire la somme des nombre comment faire ?
    Par aminepop dans le forum Excel
    Réponses: 13
    Dernier message: 03/08/2010, 21h54
  2. J'amerais faire des tests en local, comment faire ?
    Par beegees dans le forum Exchange Server
    Réponses: 0
    Dernier message: 11/01/2009, 18h35
  3. Réponses: 7
    Dernier message: 05/12/2008, 09h26
  4. Faire apparaitre/disparaitre lignes tableau -Comment Faire ?
    Par mathieu7497 dans le forum Général Conception Web
    Réponses: 9
    Dernier message: 31/03/2006, 23h39
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

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