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 :

petite questiond'un débutant


Sujet :

C

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par BnY
    alors voila le fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    fgets(avion,sizeof(avion),stdin);
    }
    Le nom saisie avec fgets() doit être débarassé de son '\n' final. On l'a pas déjà dit ça ? Idem avec les lignes lues.
    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
     
    static void clean(char *s, FILE *fp)
    {
       /* search ... */
       char *p = strchr (s, '\n');
       if (p != NULL)
       {
          /* ... and kill */
          *p = 0;
       }
       else
       {
          /* purge */
          int c;
          while ((c = fgetc(fp)) != '\n' && c != EOF)
          {
          }
       }
    }
    Ensuite, une fois que la ligne est propre, on sépare les champs. Ne pas oublier de mettre un 0 en fin de chaine...

    Visiblement, le séparateur '\t' n'est pas dans le fichier. Par contre, on peut utiliser ' '. Dans le doute, on peut utiliser isspace(), c'est fait pour (<ctype.h>)

    J'en suis là. Je te laisse finir...
    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
    88
    89
    90
    91
    92
    93
    94
     
    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <ctype.h>
     
    #if 0
    #define fname "FicCaracteristiquesAvion.txt"
    #else
    /* -ed- */
    #define fname "fichier.txt"
    #endif
     
    static void clean(char *s, FILE *fp)
    {
       /* search ... */
       char *p = strchr (s, '\n');
       if (p != NULL)
       {
          /* ... and kill */
          *p = 0;
       }
       else
       {
          /* purge */
          int c;
          while ((c = fgetc(fp)) != '\n' && c != EOF)
          {
          }
       }
    }
     
    int main(void)
    {
       int i = 0;
       char chaine[200], avion[200], aviontemp[200];
     
       printf("entrer le nom de l'avion désiré\n");
       fgets(avion, sizeof(avion), stdin);
       clean (avion, stdin);
     
       {
          FILE*pfcav = fopen(fname, "r");
     
          if (pfcav != NULL)
          {
             fgets(chaine, sizeof chaine, pfcav);
             clean (chaine, pfcav);
    #if 0
             printf("'%s'\n", chaine);
    #endif
             fgets(chaine, sizeof chaine, pfcav);
             clean (chaine, pfcav);
    #if 0
             printf("'%s'\n", chaine);
    #endif
     
             /* juste pour vérifier l'affichage, qui d'ailleurs fait de
                la m... puisqu'il fait comme si la ligne avec les =====
                n'existait pas.... cf fichier
                */
             while (fgets(chaine, sizeof chaine, pfcav) != NULL)
             {
                int i = 0;
                clean (chaine, pfcav);
                while (!isspace(chaine[i]))
                {
                   aviontemp[i] = chaine[i];
                   i++;
                }
                   aviontemp[i] = 0;
    #if 0
                printf("'%s'\n", aviontemp);
    #endif
                if (strcmp(avion, aviontemp) == 0)
                {
    #if 1
                printf("Trouve : '%s'\n", aviontemp);
    #endif
                   /* les deux printf bouclés comme ca devraient m'afficher
                      chaque avion suivi de l'avion retré par l'utilisateur,
                      c'est a peu pres ca sauf que les noms d'avions
                      deviennent bizares ils melangent les lettres et tou...*/
                }
             }
             fclose(pfcav);
          }
          else
          {
             perror(fname);
          }
       }
       return 0;
    }
    Pas de Wi-Fi à la maison : CPL

  2. #22
    BnY
    BnY est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Points : 34
    Points
    34
    Par défaut
    ben nan a la limite les caracteres bizares j'avais remarqué que c'était a cause des accents mais ca c'est pas grave... c'est que moi il m'affiche pas ca du tout.... c'est pour ca je voulais te montrer ce qu'il m'affichait... et d'ailleurs avec le code que je t'ai passé il devrait pas afficher ca normalement mais plutot un truc du genre :

    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
    entrer le nom de l'avion désiré
    concorde
    TypeAvion      Categorie      Constructeur      Distance franchissable      Vitesse croisière 
    ========================================================================================================================== 
    A320      
    A380      
    A340_200      
    B767_200      
    B777      
    B747_400       
    CRJ200      
    Concorde     
    Concorde
    AirForceOne      
    Falcon50      
    Falcon2000      
    Falcon900      
    F7X      
    Global5000      
    Challenger300      
    SuperPuma      
    CH-53      
    Gazelle
    bon bien sur avec les \n dans les printf que j'ai zappé par oubli... nan ??? enfin d'après moi en lisant le code c'est ce qui devrait apparaitre...
    je vais quand meme essayer de te donner un avant gout de ce qu'il m'affiche mais c'est bizare déjà il affiche tout plein de [[[[[[ dont la moitié est coupé en deux horizontalement je sais pas ce qu'il lui arrive...

  3. #23
    BnY
    BnY est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Points : 34
    Points
    34
    Par défaut
    voila en gros ce qu'il m'affiche:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    entrer le nom de l'avion désiré
    A320
    TypeAvion      Categorie      Constructeur      Distance franchissable      Vitesse croisière 
    A320      AvionLigne      Airbus      3064 nm      460 kt 
    A380[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|A320
    A340_200[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|A320
    etc.
    CH-53Pumar300[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|A320
    Gazellemar300[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|[|A320
    genre a la fin les noms d'avion n'existent meme plus... et tu crois que c'est juste en enlevant le \n que ca reglerait mon problème ?? j'essaierai ca demain au bahut mais bon...

  4. #24
    BnY
    BnY est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Points : 34
    Points
    34
    Par défaut
    bon j'essaierai d'enlever ce \n demain mais par curiosité tu saurais me dire pourquoi il faut l'enlever ?

    d'autant que dans mon while je suis censé m'arrêter au \t juste apres le nom de l'avion...

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par BnY
    bon j'essaierai d'enlever ce \n demain mais par curiosité tu saurais me dire pourquoi il faut l'enlever ?

    d'autant que dans mon while je suis censé m'arrêter au \t juste apres le nom de l'avion...
    Parce que si tu compares "Concorde\n" avec "Concorde", tu ne vas jamais le trouver...

    Relis mes réponses précédentes, il y a des compléments...
    Pas de Wi-Fi à la maison : CPL

  6. #26
    BnY
    BnY est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Points : 34
    Points
    34
    Par défaut
    oki ^^ j'ai pigé et par contre pour les noms d'avions inventés et les caracteres du genre [|[|[|[| bizares t'as une idée ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par BnY
    oki ^^ j'ai pigé et par contre pour les noms d'avions inventés et les caracteres du genre [|[|[|[| bizares t'as une idée ?
    Ben oui, déjà signalé :
    Citation Envoyé par -ed-
    Ne pas oublier de mettre un 0 en fin de chaine...
    Pas de Wi-Fi à la maison : CPL

  8. #28
    BnY
    BnY est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Points : 34
    Points
    34
    Par défaut
    a oki je savai pas que le 0 servait a ca dsl

    ben merci bien

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par BnY
    a oki je savai pas que le 0 servait a ca dsl

    ben merci bien
    Tu ne connais pas la structure des chaines C ? C'est quand même le B.A. BA...
    Pas de Wi-Fi à la maison : CPL

  10. #30
    BnY
    BnY est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    160
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 160
    Points : 34
    Points
    34
    Par défaut
    et bien je ne savais pas que le 0 m'enlevait les caractères bizares [||[|[|[| a l'affichage... disons que j'apprends beaucoup d'un coup et j'oublie plein de trucs que je lis... il me semble effectivement avoir croisé "une chaine se termine par \0" ou un truc du genre mais alors a quoi ca servait et qu'est ce que ca donne a l'affichage ....

    comme tu le sais je suis loin d'etre un expert et je n'ai peut etre pas appris de la bonne maniere mais bon j'essaie de faire avec et quand j'aurais recu mon livre de C j'espere pouvoir acquerir les bases mieux que ce que l'école a essayé de me faire acquerir en 4ans... voili voilou

Discussions similaires

  1. Réponses: 1
    Dernier message: 15/03/2007, 20h16
  2. Petite question de débutant
    Par Arry_C dans le forum Access
    Réponses: 2
    Dernier message: 03/03/2007, 21h02
  3. [aide]Petit probléme de débutant
    Par diden138 dans le forum Flash
    Réponses: 6
    Dernier message: 01/12/2006, 21h49
  4. Petites questions de débutant
    Par mickael.be dans le forum Débuter
    Réponses: 15
    Dernier message: 28/12/2005, 17h06
  5. aide petit programme pour débutant
    Par kartp0rqx dans le forum C
    Réponses: 16
    Dernier message: 14/10/2005, 19h31

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