Partage
  • Partager sur Facebook
  • Partager sur Twitter

Probleme de variable

ou est le soucis ?

    13 mars 2006 à 8:02:53

    Bonjour,
    Mon script a pour but de cherché une phrase qui contient un mot dans un fichier texte.
    Lorsque j'utilise une variable qui contient un mot saisie par l'utilisateur sa affiche tout les lignes du fichier texte au lieu de d'une ligne (celle qui contient le mot saisie).

    Par contre si j'enleve la partie saisie de mon code, puis je remplace la variable qui contenait la saisie par un mot entre "", mon code fonctionne normalement: il affiche seulement les lignes ou le mot est présent.

    Code avec la variable (c'est la qu'il y a un probleme):

    #include "stdafx.h"
    #using <mscorlib.dll>
    #define TAILLE_MAX 1000
    using namespace System;

    int _tmain()
    {
       FILE* fichier = NULL;
       char ligne[TAILLE_MAX] = "";
        fichier = fopen("test.txt""r");
            printf("Veuillez saisir un mot a traduire en anglais.\n");
            char mot[TAILLE_MAX] = "";
            scanf("%ld"‚ mot);
        if (fichier != NULL)
        {
                    while(!feof(fichier) || !strstr(ligne‚mot)) {
            fgets(ligne‚ TAILLE_MAX‚ fichier);     
                    if (strstr(ligne‚ mot) != NULL) { printf("%s\n"‚ ligne); }
            }
                    fclose(fichier);
        }
        else
        {
            // On affiche un message d'erreur si on veut
            printf("Impossible d'ouvrir le fichier test.txt");
        }
        return 0;
    }


    Code avec un mot précis à la place de la variable (la sa focntionne comme il faut):

    #include "stdafx.h"
    #using <mscorlib.dll>
    #define TAILLE_MAX 1000
    using namespace System;

    int _tmain()
    {
       FILE* fichier = NULL;
       char ligne[TAILLE_MAX] = "";
        fichier = fopen("test.txt""r");
        if (fichier != NULL)
        {
                    while(!feof(fichier) || !strstr(ligne‚"Premiere")) {
            fgets(ligne‚ TAILLE_MAX‚ fichier);     
                    if (strstr(ligne‚ "Premiere") != NULL) { printf("%s\n"‚ ligne); }     
            }
                    fclose(fichier);
        }
        else
        {
            printf("Impossible d'ouvrir le fichier test.txt");
        }
        return 0;
    }


    "Premiere" est mot choisi pour testé. Le probleme c'est que le code ne fonctionne pas correctement avec une variable.

    Merci d'avance
    • Partager sur Facebook
    • Partager sur Twitter
      13 mars 2006 à 8:46:45

      Tu utilises du C++ dans du C??
      Met le bon Zcode, merci !
      • Partager sur Facebook
      • Partager sur Twitter
        13 mars 2006 à 9:04:24

        Citation : Nuja

        Code avec la variable (c'est la qu'il y a un probleme):


        • scanf() avec "%ld" attend l'adresse d'un long. Ici, tu veux probablement "%s"...
        • feof() ne fait pas ce que tu crois. Il faut tester la valeur retournée par la fonction de lecture (ici, fgets())
        • l'organisation du code est inutilement tordue et complexe. Il faut rester le plus simple possible

        Je préconise ceci (validé en C)

        #ifdef __cplusplus__
        #include "stdafx.h"
        #using <mscorlib.dll>
        using namespace System;
        #else
        #include <stdio.h>
        #include <string.h>
        #define _tmain main
        #endif

        #define TAILLE_MAX 1000
        #define fname "test.txt"


        static void clean(char *s‚ FILE*fp)
        {
           char *p = strchr (s‚ '\n');

           if (p != NULL)
           {
              *p = 0;
           }
           else
           {
              int c;

              while ((c = fgetc(fp)) != '\n' && c != EOF)
              {
              }
           }
        }

        int _tmain(void)
        {
           FILE* fichier = fopen(fname‚ "r");

           if (fichier != NULL)
           {
              int found = 0;
              char ligne[TAILLE_MAX] = "";
              char mot[TAILLE_MAX] = "";

              printf("Veuillez saisir un mot a traduire en anglais.\n");
              fgets(mot‚ sizeof mot‚ stdin);
              clean (mot‚ stdin);

              while (fgets(ligne‚ TAILLE_MAX‚ fichier) != NULL && !found)
              {
                 char *p = strstr(ligne‚ mot);

                 if (p != NULL && p == ligne)
                 {
                    p = strchr(ligne‚ ' ');

                    if (p != NULL)
                    {
                       while (*p == ' ')
                       {
                          p++;
                       }
                       printf("%s\n"‚ p);
                       found = 1;
                    }
                 }
              }
              fclose(fichier);
              if (!found)
              {
                 printf ("Mot inconnu.\n");
              }
           }
           else
           {
              // On affiche un message d'erreur si on veut
              perror(fname);
           }
           return 0;
        }

        Pose des questions si tu ne comprends pas.

        Nota : je n'utilise pas scanf(). Trop complexe à mettre en oeuvre correctement.

        http://mapage.noos.fr/emdel/notes.htm#saisie
        http://mapage.noos.fr/emdel/notes.htm#fichiers
        • Partager sur Facebook
        • Partager sur Twitter
        Music only !
          13 mars 2006 à 9:12:57

          Merci pour vos réponses,
          Désolé si mon code n'est pas parfait mais bon je débute, j'ai besoin du c++ et d'apres le siteduzero, le c++ rajoute des fonctionnalitées (changement ?).
          Je veux apprendre le c++ mais le cours n'est pas encore online, aloirs j'apprends le c'est a peu pres pareil. Mon code fonctionne quand je remplace %ld par %s.
          ++
          • Partager sur Facebook
          • Partager sur Twitter

          Probleme de variable

          × 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