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 :

Générer 10 mots aléatoires à partir d'un csv


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 30
    Points : 21
    Points
    21
    Par défaut Générer 10 mots aléatoires à partir d'un csv
    Bonjour,
    Je réalise en groupe un projet (devoir) dont le but (du programme) est l'apprentissage de vocabulaire. Mais le programme tel qu'il est écrit marche mais finit quand il finit de parcourir tout le fichier.
    Voici mon code pour un Vocabulaire Francais->Anglais :

    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
    void VocabulaireFrancaisAnglais(void)
    {
        vider_tampon();
        FILE *fichier = NULL; /* fichier est le nom local du fichier */
        fichier = fopen("VocabFraAng.csv" , "r"); /* Initialisation du fichier qui représentera le fichier data.txt ouvert */
        if ( fichier != NULL )
        {
            char MotFrancais[WORD_SIZE_MAX];
            char MotAnglais[WORD_SIZE_MAX];
            char ligne[WORD_SIZE_MAX];
     
            char* motTemp;
            char saisie[WORD_SIZE_MAX]; /* Déclaration d'une variable "saisie" de type chaîne de caractères pour la suite */
            int resultat = 0;
     
            while ( fgets( ligne, sizeof(ligne), fichier ) != NULL && !feof(fichier)) /* Lire une ligne */
            {
                /* memset (saisie, 0, sizeof (saisie)); */
     
                motTemp=strtok(ligne, ","); /* APPEL jusqu'à la virgule => (EN GROS) LE PREMIER MOT (Francais) */
                strncpy(MotFrancais, motTemp, WORD_SIZE_MAX); /* Fonction qui copie le contenu de motTemp dans MotFrancais */
                motTemp=strtok(NULL, ""); /* APPEL jusqu'à la virgule => DEUXIEME MOT (Anglais) */
                strncpy(MotAnglais, motTemp, WORD_SIZE_MAX);
                fprintf(stdout, "Traduction de : %s ? (Puis taper sur entrée)\n", MotFrancais);
                /* DEBUG
                fprintf(stdout, "%s", saisie);
                */
                fgets(saisie, sizeof saisie, stdin); /* Saisie sécurisée : fonction équivalente à fscanf */
     
                /* La fonction strcmp renvoie une valeur (0 si c'est juste) que l'on affecte à une variable "resultat" */
                resultat = strcmp(saisie, MotAnglais);
     
                if (! resultat) /* Correction */
                    fprintf(stdout, "Bravo. C'était la bonne réponse :-)\n\n");
                else
                    fprintf(stdout, "Faux. La réponse était %s \n", MotAnglais);
     
            }
     
            if(fclose(fichier) == EOF)
            {
                fprintf(stdout, "Probleme de fermeture du fichier");
                EXIT_FAILURE;
            }
        }
        else /*( fichier == NULL)*/
        {
            fprintf(stdout, "Problème d'ouverture du fichier \n");
            EXIT_FAILURE;
        }
        EXIT_SUCCESS;
    }
    Tandis que le VocabFraAng.csv en question se présente de la manière suivante (quand on l'ouvre avec un bloc-notes)

    Motfrancais1,motanglais1
    Motfrancais2,motanglais2
    Motfrancais3,motanglais3
    ...

    Merci de votre aide

  2. #2
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    Le comportement ici est normal, étant donné que tu fais une boucle sur la lecture du fichier qui va se terminer quand on arrivera à la fin du fichier

    Il serait mieux à mon sens de diviser ton programme en 2 parties:
    • Une partie qui va lire le fichier, l'interpréter et le placer dans une structure de données (les listes chaînées par exemple, qui pourraient t'être utiles ici)
    • Une fois le chargement effectué, la boucle "principale" du programme va aller lire ta structure de données (qui ne dépend donc plus de la lecture du fichier) pour faire son travail
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    Comment on fait ? On a pas vu cette notion :p
    Sinon c'est avant jeudi la fin de ce projet. Si j'y arrive pas, c'est pas grave je noterai que c'est une "idée d'amélioration"

  4. #4
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Comment on fait une liste chainée ? Il y a des 10 aines de discussions à propos des listes chainées sur ce forum, et je suis sûr qu'Internet te donnera des tonnes d'informations à ce sujet

    Petite remarque sur le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        else /*( fichier == NULL)*/
        {
            fprintf(stdout, "Problème d'ouverture du fichier \n");
            EXIT_FAILURE;
        }
        EXIT_SUCCESS;
    Les EXIT_MACHINS, ce sont des macro à toi ou tu réutilises les constantes standard ?

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    C'est les constantes standard

  6. #6
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Dans ce cas, tu ne les utilises pas correctement. Voici par exemple ce que contient mon stdlib.h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /*
     * These values may be used as exit status codes.
     */
    #define	EXIT_SUCCESS	0
    #define	EXIT_FAILURE	1
    Ainsi, si je mets une ligne telle que EXIT_SUCCESS;, j'obtiens alors le warning suivant :
    D:\Users\pgradot\Documents\C\dvpez.c||In function 'main':|
    D:\Users\pgradot\Documents\C\dvpez.c|64|warning: statement with no effect [-Wunused-value]|
    ||=== Build finished: 0 errors, 1 warnings (0 minutes, 1 seconds) ===|
    
    C'est comme si tu écrivais une ligne 42;. Ca n'a aucun effet. Je suppose que tu veux en fait retourner ces valeurs, il faut donc écrire : return EXIT_SUCCESS;.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonsoir,

    Citation Envoyé par Bktero Voir le message
    Je suppose que tu veux en fait retourner ces valeurs, il faut donc écrire : return EXIT_SUCCESS;.
    À ceci près que le retour de la fonction est de type void, qui signifie justement : ne retourne aucune valeur.
    Si tu souhaites retourner l'état de bon ou mauvais déroulement de ton programme, il faudra alors écrire à la place le type retourné, en l'occurrence ici int.

  8. #8
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juin 2009
    Messages
    4 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 481
    Points : 13 678
    Points
    13 678
    Billets dans le blog
    1
    Par défaut
    Oh oui ! Merci de l'avoir remarqué !

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2014
    Messages : 30
    Points : 21
    Points
    21
    Par défaut
    En gros faut 2 "listes chaînées" ?

  10. #10
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Une seule devrait suffire (techniquement c'est juste une structure dont un des champs est un pointeur vers le "maillon" suivant)
    Toute question technique envoyée en MP ira directement à la poubelle

    Un code ne marchera jamais, il n'a jamais reçu la capacité de se déplacer.
    Inutile donc de dire "ça marche pas", donnez plutôt des informations précises afin de mieux pouvoir vous aider.


    Grand gourou de la -attitude

Discussions similaires

  1. Problème pour générer un mot aléatoire
    Par nekcorp dans le forum Général Python
    Réponses: 2
    Dernier message: 10/05/2014, 18h41
  2. [rand] Générer un mot.. pseudo aléatoirement
    Par Deallyra dans le forum Débuter
    Réponses: 8
    Dernier message: 23/01/2010, 21h53
  3. [Batch] Sortir un mot aléatoire a partir d'un fichier txt
    Par AZzjeioafh dans le forum Scripts/Batch
    Réponses: 10
    Dernier message: 17/11/2009, 21h19
  4. Réponses: 2
    Dernier message: 27/05/2004, 01h40
  5. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 17h30

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