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 :

petit problème avec strcmp


Sujet :

C

  1. #41
    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 oki bon donc on veut la fonction qui retourne 0 si ce n'est pas un espace et 1 sinon :

    j'ai bon ??
    C'est un peu barbare, mais oui. On peut aussi le coder comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int espace (int caract)
    {
       return caract == ' ';
    }
    et avec ce que j'ai lu sur fgets dans mon livre:

    si elle rencontre un \n elle le met dans le tableau et ajoute en fin de tableau le \0...
    Exact.
    donc dans mon code quand je fgets l'avion de l'utilisateur et que je le mets dans avion[] avec la fonction que tu m'as donné clean() je remplace le \n ( qui est rentré en tapant 'entrée' par l'utilisateur, c'est ca ??) par \0... cela fait donc bien deux \0 en fin de tableau ...
    Oui. Seul le premier 0 compte. Ce qu'il y a après, est ignoré par les fonctions 'chaine'.
    donc quand je le compare avec aviontemp dans lequel j'avais fgets l'avion du fichier , si je rajoute un /0 en fin de aviontemp comme je le faisais dans le code au début du topic ca suffit ?? -> puisque fgets met déjà un \0 dans aviontemp et que je lui en rajoute un...

    j'ai bon ??
    Ca devrait aller. Visiblement, tu fonctionnes mieux quand tu as dormi...
    Pas de Wi-Fi à la maison : CPL

  2. #42
    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
    euhh lol tu as peut etre besoin du sujet lol nan ?? :

    Oui. Seul le premier 0 compte. Ce qu'il y a après, est ignoré par les fonctions 'chaine'.
    -> oki mais donc si seul le premier \0 compte en fait je n'ai meme pas besoin de rajouter un \0 à aviontemp puisque :

    fegts en met déjà un dans chaine[] et apres on fait aviontemp[]=chaine[]... donc jusque la aviontemp contient un \0 en fin et lors de la comparaison
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcmp(aviontemp,avion)
    la lecture s'arretera au premier \0 rencontré dans avion... je me trompe ?? en fait le seul truc a faire c'est de convertir les éventuels \n pour ne pas qu'ils dérangent ...?!?!?

  3. #43
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut
    Citation Envoyé par BnY
    euhh lol tu as peut etre besoin du sujet lol nan ?? :
    Tu l'as déjà donné dans un autre sujet.

    Citation Envoyé par BnY
    -> oki mais donc si seul le premier \0 compte en fait je n'ai meme pas besoin de rajouter un \0 à aviontemp puisque :

    fegts en met déjà un dans chaine[] et apres on fait aviontemp[]=chaine[]... donc jusque la aviontemp contient un \0 en fin et lors de la comparaison
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    strcmp(aviontemp,avion)
    la lecture s'arretera au premier \0 rencontré dans avion... je me trompe ?? en fait le seul truc a faire c'est de convertir les éventuels \n pour ne pas qu'ils dérangent ...?!?!?
    Non, car fgets rajoute un \n donc ta chaine sera faussée. Voila, il faut convertir le \n en un \0 .

    Après, je ne te conseille pas d'utiliser strcmp, j'ai commencé ton sujet et il n'est pas approprié.

    Après avoir trié le nom des avions dans le fichier, tu places le nom des avions dans une chaine, tu utilises strstr pour savoir si le resultat du fgets pour le nom de l'avion est juste et après tu continues la suite.

    Kr00pS

  4. #44
    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 mais donc si seul le premier \0 compte en fait je n'ai meme pas besoin de rajouter un \0 à aviontemp puisque :

    fgets en met déjà un dans chaine[] et apres on fait aviontemp[]=chaine[]... donc jusque la aviontemp contient un \0 en fin et lors de la comparaison
    Quand tu fais la copie caractères par caractères, il faut penser à mettre le 0 final (dans la copie).

    On a pas déjà expliqué ça 3000 fois ?
    Pas de Wi-Fi à la maison : CPL

  5. #45
    Membre Expert

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Points : 5 724
    Points
    5 724
    Par défaut
    En fait ton \n sera avant ton \0 c'est cela qui pose probléme. Si fgets mettait le \n après le \0 cela n'aurait pas de sens et ne poserait pas de probléme puisqu'il serait ignorer par strcmp ( qui lui s'arrete sa comparaison au plus tard au premier \0 rencontré) et donc aucune utilité d'éliminer ce caractère
    " Dis ce que tu veux qui insulte mon honneur car mon silence sera la réponse au mesquin.
    Je ne manque pas de réponse mais : il ne convient pas aux lions de répondre aux chiens ! " [Ash-Shafi'i ]

  6. #46
    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
    autrement je pense donc faire des fonctions pour alléger le main et comme je l'avais déjà précisé dans un ancien post je voulais garder la valeur de mon i incrémenté, après l'appel de la fonction..

    par exemple prenons une fonction qui justement me permettrait de garder en temp une chaine lue dans le fichier...: avec commentaires pour dire comment je vois les choses

    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
    int chaine_temp(char* chainetemp,char* chainefic, int* pointeur) 
    { 
     
    	int a= *ptr; /* a prend la valeur à l'adresse pointée par ptr*/	
     
    	while(chainefic[a]!='\t') {
     
    		if(chainefic[a]=' ') {
     
    			continue; 
    		} 	
     
    		chainetemp[a]=chainefic[a];
     
    		a++; /*la valeur est incrémentée */
     
    	}
     
    	return a; /*on retourne cette valeur*/
    }
    et après dans le main faire par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int i=0;
    ptr= &i; /* ptr pointe vers i*/			
     
    i= chaine_temp(aviontemp,avion,ptr); /* i est égal à la valeur retournée
    par la fonction soit a, qui est égal à la valeur de i initiale incrém.*/
    PS. ne nous occupons pas du ' ' ou isspace je vous prie lool

    est-ce que déjà ma fonction parait bonne ? et est-ce qu'effectivement je garde la valeur de mon i incrémenté ( en fait a), dans i ??

  7. #47
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut
    1. Tu n'utilises pas les bons noms pour ta fonction, ça ne compile pas.

    2. Le pointeur ptr n'est pas envoyé à ta fonction donc a ne peut pas le prendre.

    3. Tu renvoies une valeur avec une fonction void, depuis quand on peut faire cela ?

    PS : Au fait, ton sujet est à rendre pour quand ?

    Je voudrais pas te bousculer mais il n'est pas très avancé :/

  8. #48
    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
    alors ...:

    -> tu entends quoi par :

    Tu n'utilises pas les bons noms pour ta fonction, ça ne compile pas.
    ??

    -> le sujet est a rendre avant le 9mai... et encore je suis meme pas sur d'avoir mis tout le sujet lool je peux mettre le pdf sur un post pour que tu vois l'étendue du truc lool ... et pourquoi tu croies que je le travaille tous les jours ?? lool s'il était avancé je profiterai de mes vacances pour faire autre chose lol :p ou en tout cas ne pas le travailler tous les jours..


    ->
    Quand tu fais la copie caractères par caractères, il faut penser à mettre le 0 final (dans la copie).

    On a pas déjà expliqué ça 3000 fois ?
    et bien non ce n'était pas expliqué comme ceci, mais plutôt qu'il fallait mettre un \0 en fin de chaine... je savais pas trop pourquoi mais oki et puis je pensais pas que la copie caractère par caractère zappait le \0.. bon ben de toute manière il était mis dans le code , non ?

    http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strstr.3.html a écrit:
    La fonction strstr() cherche la premiere occurence de la sous-chaîne aiguille au sein de la chaîne meule_de_foin. Les caractères `\0' de fin ne sont pas comparés.
    si c'est pas formidable : les \0 ne sont pas comparés lool !!! et oki donc en fait, strstr "compare" ( les guillemets sont importants lol )les chaines et si elle voit l'une dans l'autre elle renvoie un pointeur vers la premiere chaine ... dans ce cas toi tu me conseille de mettre tous les avions de la liste dans une meme chaine c'est ca ?? : ->

    tu places le nom des avions dans une chaine

  9. #49
    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
    3. Tu renvoies une valeur avec une fonction void, depuis quand on peut faire cela ?
    dsl j'étais distrait

    2. Le pointeur ptr n'est pas envoyé à ta fonction donc a ne peut pas le prendre.
    et si je le passe en argument, ca va ?? cf code édité plus haut

  10. #50
    Membre habitué
    Inscrit en
    Octobre 2005
    Messages
    141
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Octobre 2005
    Messages : 141
    Points : 135
    Points
    135
    Par défaut
    Tu n'utilises pas les bons noms pour ta fonction, ça ne compile pas.
    Dans ta fonction, la chaine nommée "chaine" n'existe pas, il faut l'envoyer à la fonction en argument, car il faut savoir que dans une fonction, les arguments sont copiés et enfin transformés (ou non) dans la fonction.

    -> le sujet est a rendre avant le 9mai... et encore je suis meme pas sur d'avoir mis tout le sujet lool je peux mettre le pdf sur un post pour que tu vois l'étendue du truc lool ... et pourquoi tu croies que je le travaille tous les jours ?? lool s'il était avancé je profiterai de mes vacances pour faire autre chose lol :p ou en tout cas ne pas le travailler tous les jours.. Wink
    Envoie par mp :p

    si c'est pas formidable : les \0 ne sont pas comparés lool !!! Very Happy Very Happy Very Happy Very Happy et oki donc en fait, strstr "compare" ( les guillemets sont importants lol Wink )les chaines et si elle voit l'une dans l'autre elle renvoie un pointeur vers la premiere chaine ... dans ce cas toi tu me conseille de mettre tous les avions de la liste dans une meme chaine c'est ca ?? : ->
    Oui comme ça, tu vérifies directement la saisie de l'avion et tu peux la repeter si l'avion entré ne figure pas dans la liste (ça fait un bug en moins).

    et si je le passe en argument, ca va ?? cf code édité plus haut Wink
    Oui.

  11. #51
    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
    Dans ta fonction, la chaine nommée "chaine" n'existe pas, il faut l'envoyer à la fonction en argument, car il faut savoir que dans une fonction, les arguments sont copiés et enfin transformés (ou non) dans la fonction.
    dsl décidément je perds la boule lol il s'agit de chainefic cf code réédité lol

  12. #52
    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
    ->
    Quand tu fais la copie caractères par caractères, il faut penser à mettre le 0 final (dans la copie).

    On a pas déjà expliqué ça 3000 fois ?
    et bien non ce n'était pas expliqué comme ceci, mais plutôt qu'il fallait mettre un \0 en fin de chaine... je savais pas trop pourquoi mais oki et puis je pensais pas que la copie caractère par caractère zappait le \0.. bon ben de toute manière il était mis dans le code , non ?
    Dans la fonction chaine_temp(), tu copies des caractères de chainefic vers chainetemp. OK ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chainetemp[a]=chainefic[a];
    Or la boucle s'arrête au premier '\t' rencontré. OK ?
    A ce moment là, un certan nombre de caractères (a, si j'ai bien compris) ont été copiés dans chainetemp. OK ?

    Alors quelle est la valeur de chainetemp[a] ?

    Moi, je dis qu'elle est indéterminée, et si on ne met pas rapidement un 0 ici pour 'fermer' la chaine, la suite va mal se passer... (chaine invalide, comportement indéterminé...)

    Donc je propose (mais y'a pas trop le choix, genre Villepin...) de mettre un 0 pour fermer la chaine :
    Me suis-je bien fait comprendre ?

    http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man3/strstr.3.html a écrit:
    La fonction strstr() cherche la premiere occurence de la sous-chaîne aiguille au sein de la chaîne meule_de_foin. Les caractères `\0' de fin ne sont pas comparés.
    si c'est pas formidable : les \0 ne sont pas comparés lool !!! et oki donc en fait, strstr "compare" ( les guillemets sont importants lol )les chaines et si elle voit l'une dans l'autre elle renvoie un pointeur vers la premiere chaine ... dans ce cas toi tu me conseille de mettre tous les avions de la liste dans une meme chaine c'est ca ?? : ->

    tu places le nom des avions dans une chaine
    Non. Par contre, je vois que tu as découvert strstr(). Effectivement, c'est une bonne solution pour identifier la ligne. Tu n'as plus besoin de faire de copie ni de comparaison.
    Pas de Wi-Fi à la maison : CPL

  13. #53
    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
    argghh je comprends rien...

    bon j'ai suivi le conseil : utilise strstr au lieu de strcmp...et voila que j'obtiens une erreur bien bizarre sur laquelle j'ai bien du mal a trouver des réponses...claires!!

    je compile le code suivant:

    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
    #include<stdio.h>
    #include<string.h>
    #include<stdlib.h>
    #define ficUtilisateurs fic1;
    int main (void) {
     char chaine[200],login[200];
     
     FILE*flot;
     
     printf("entrer login\n");
     fgets(login,sizeof login,stdin);
     flot=fopen("fic1.txt","r");
     if(fgets(chaine,sizeof chaine,flot)!=NULL) {
      char *p=strstr(chaine,login);
     
      printf("valeur pointée est %c",*p);
     } else printf("erreur d'ouverture");
     return 0;
     
    }
    0 erreurs 0 warnings

    mais à l'éxécution au début ca se passe bien il me demande bien le login et dés que je tape entrée, il me met un message d'erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Debug assertion failed!
    FILE:fgets.c
    Line 60
    expression:str!=NULL
    sur une fenêtre à part... comme je sais pas trop d'ou vient l'erreur ( de mon code ou de visual) j'ai posté la question sur les deux forums visualC++ et langageC...

    si quelqu'un a une idée...merci d'avance

  14. #54
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Il faut tester le retour de fopen et aussi celui de strstr.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    char *p = strstr(...);
    if(p == NULL)
    [...]

    Pour afficher tu peux faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%s\n", c);
    C'est pas interdit...

    Le double post n'est pas très aprécié, evite à l'avenir...
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  15. #55
    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
    Pour afficher tu peux faire
    Code :
    printf("%s\n", c);
    tu veux dire nan ?? et si non, alors c'est quoi ''c''...?

    oki je me rappellerai pour le double post par curiosité: en quoi c'est pas apprécié si je ne sais pas exactement d'ou vient le problème ??

  16. #56
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par BnY
    tu veux dire nan ?? et si non, alors c'est quoi ''c''...?
    Oups pour c et en fait je voulai dire
    oki je me rappellerai pour le double post par curiosité: en quoi c'est pas apprécié si je ne sais pas exactement d'ou vient le problème ??
    Ben parce que ca sert à rien de poster à 2 endroits différents. Ca n'augment pas tes chances de réponses...
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  17. #57
    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 voila le code avec quelques changements... :

    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
     
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
     
    int main (void) {
     
     char chaine[200],login[200];
     
     FILE*flot;
     
     printf("entrer login\n");
     
     fgets(login,sizeof login,stdin);
     
     flot=fopen("ficUtilisateurs.txt","r");
     
     if (flot==NULL) 
     {
      printf("erreur flot\n");
     }
     
     fgets(chaine,sizeof chaine,flot);
     
     printf("chaine1: %s\n",chaine);
     
     fgets(chaine,sizeof chaine,flot);
     
     printf("chaine2: %s\n",chaine);
     
     if(fgets(chaine,sizeof chaine,flot)!=NULL) {
     
        char *p=strstr(chaine,login);
     
        if (p==NULL)
        {
           printf("erreur strstr\n");
        }
     
        printf("valeur pointée est %c",p);
     
     } else printf("erreur d'ouverture");
     
     fclose(flot);
     
     return 0;
     
    }

    et l'erreur apparement vient du strstr... vu qu'il m'affiche erreur de strstr ( le pointeur pointe sur NULL, donc a priori le strstr ne reconnait pas login dans chaine... je sais pas pourquoi vu que je recopie exactement le nom du fichier... )

  18. #58
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Citation Envoyé par BnY
    bon voila le code avec quelques changements... :


    et l'erreur apparement vient du strstr... vu qu'il m'affiche erreur de strstr ( le pointeur pointe sur NULL, donc a priori le strstr ne reconnait pas login dans chaine... je sais pas pourquoi vu que je recopie exactement le nom du fichier... )
    Apres ton 2eme printf tu refais un fgets, tu es sur que la nouvelle ligne lue contient le login???

    Si fopen echou c'est bien beau d'afficher un message mais faudrait peut-etre sortir du programme/fonction
    Introduction à Silverlight 4 (new) ; Localisation d'une application Silverlight (new) ;
    Mon espace perso[/B]

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. Albert Einstein[/SIZE]

  19. #59
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Logon  Password  Profile
    =======================================================
    durand  durand28  regulateur
    passei  ,34%FgT  chefregulateur
    bernard  uyrfcr32/  regulateur
    bartes  martaded  regulateur
    fervion  4drfa$Lju  securiteinfo
    voici le fichier en question... les deux premiers fgets sont la pour "sauter" les deux premieres lignes qui ne servent à rien concrètement... ensuite le fgets dans le 'if' devrait contenir la troisieme ligne du fichier soit, le login "durand" et tout le reste de la ligne... donc quand j'utilise je cherche l'occurence de login ( rentré par l'utilisateur, par exemple : "durand") dans chaine (soit la ligne :'durand durand28 regulateur' ) donc normalement il devrait le trouver ... et apparement non, et je ne sais pas pourquoi... après je comptai le mettre en boucle pour pouvoir analyser de cette manière tout le fichier mais si déjà il bloque pour une ligne ca m'embête...

    Si fopen echou c'est bien beau d'afficher un message mais faudrait peut-etre sortir du programme/fonction
    oui oui bon pour l'instant je cherchai juste a savoir d'où venait l'erreur je vais mettre un chti truc pour sortir du prog comme tu dis

  20. #60
    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 voila le code avec quelques changements... :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     char chaine[200],login[200];
     fgets(login,sizeof login,stdin);
    Pour 1000 ème fois, tu n'as pas retiré le '\n'.

    http://www.developpez.net/forums/sho...0&postcount=43

    Alors strstr() cherche avec "xyz\n" qu'il ne trouvera évidemment 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
    19
    20
    21
    22
    23
     
    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)
          {
          }
       }
    }
     
    <...>
     fgets(login,sizeof login,stdin);
    clean(login,stdin);
    A faire après chaque fgets() (stdin, fichier, peu importe..., mais il faut que ça corresponde quand même...)
    Pas de Wi-Fi à la maison : CPL

Discussions similaires

  1. Petits problèmes avec une CListCtrl
    Par vanitom dans le forum MFC
    Réponses: 2
    Dernier message: 17/11/2005, 11h45
  2. Un petit problème avec pop
    Par Paulinho dans le forum C++
    Réponses: 4
    Dernier message: 13/11/2005, 20h57
  3. Petit problème avec Line Input
    Par GrosQuicK dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/09/2005, 12h47
  4. (Petit ?) problème avec une page contenant du Flash
    Par ologram dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/09/2005, 18h45
  5. Petit problème avec SDL
    Par Nyarlathotep dans le forum C
    Réponses: 10
    Dernier message: 01/07/2005, 09h10

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