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 :

Probleme de comparaison avec un if


Sujet :

C

  1. #1
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut Probleme de comparaison avec un if
    Salut,

    j'appel une fonction lecture_fichier_txt qui comme sont nom l'indique va me lire les données d'un fichier.
    Ensuite j'effectue un printf pour voir la valeur qui a était recuperer.

    La valeur etant exact, elle s'affiche a l'ecran ds mon cas il s'agit d'une chaine "Affichage"

    Le ptit hic est que lorsque je fais une comparaison avec un if cela ne fonctionne 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
    char* lecture_fichier_txt(int ligne); // fct permetant de lire une ligne du fichier
                                                            // txt est de renvoyer un pointeur
    
    int fct_main()
    {
    int ligne6=6;
    char* retour6 = NULL;
    
    .....
    .......
    retour6=lecture_fichier_txt(ligne6);
    printf("la chaine est donc : %s\n",retour6); // Ici je recupere bien la chaine "Affichage"
    
    
    if (retour6=="Affichage")
    printf("OK on a recupere la chaine\n");
    else
    printf("On a rien recuperer\n");
    }
    Donc ici la comparaison ne fonctionne pas ???

  2. #2
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Pour comparer des chaînes, il faut utiliser strcmp().

  3. #3
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    mais avec un if normalement ca peut marcher aussi???

  4. #4
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par insa59
    mais avec un if normalement ca peut marcher aussi???
    Oui, mais dans ce cas (i.e. avec ==), vous comparez les valeurs des pointeurs, non les caractères des chaînes. Il faut utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if (!strcmp(chaine1,chaine2))
     /*Identiques*/
    else /*Différentes*/

  5. #5
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (!strcmp(chaine1,chaine2))  /*Identiques*/ else /*Différentes*/
    J'ai essayer la méthode mais ca ne fonctionne pas

    J'ai aussi fais comme cela mais rien. Il ne compare pas j'ai l'impression !!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    char ch1[] = "Affichage";
     
    if (strcmp(retour7,ch1)==0)
    printf("OK on a recupere la chaine\n");
    else
    printf("On a rien recuperer\n");

  6. #6
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par insa59
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (!strcmp(chaine1,chaine2))  /*Identiques*/ else /*Différentes*/
    J'ai essayer la méthode mais ca ne fonctionne pas
    Ca fonctionne. Vous devez mal l'utiliser. Inspirez-vous de ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #include <stdio.h>
    #include <string.h>
     
     
    int main(void)
     {
     char chaine1[]="test";
     
     if (!strcmp(chaine1,"test")) printf("Identiques\n");
     else printf("Différentes\n");
     return 0;
     }

  7. #7
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    Oui je sais bien mais moi ds mon cas ca ne fonctionne pas c'est vraiment bizarre car lorsque je recupere la chaine je fais le printf et c'est bon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    retour7=lecture_fichier_txt(ligne7);
    printf("la chaine est donc : %s\n",retour7);
    Mais en faite ce qui me parait bizarre et que ma fonction lecture_fichier_txt me renvoie un pointeur et j'arrive qd meme a le lire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    char* lecture_fichier_txt(int ligne);
    ????

  8. #8
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    As-tu bien vérifié que le caractère \n n'est pas présent dans ta chaîne ? Celà pourrais faire échouer ta comparaison !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    char * p = strchr (retour7, '\n');
     
    if (p != NUL)
    {
       *p = 0;
    }
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  9. #9
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par insa59
    Oui je sais bien mais moi ds mon cas ca ne fonctionne pas c'est vraiment bizarre car lorsque je recupere la chaine je fais le printf et c'est bon

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    retour7=lecture_fichier_txt(ligne7);
    printf("la chaine est donc : %s\n",retour7);
    Si vous utilisez strcmp() correctement et que strcmp() dit que les chaînes sont différentes, c'est qu'elles doivent l'être. Essayez voir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("%d\t%d\n",strlen(retour7),strlen("Affichage"));

  10. #10
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    s-tu bien vérifié que le caractère \n n'est pas présent dans ta chaîne ?
    Oui biensur c'est la premiere chose que j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%d\t%d\n",strlen(retour7),strlen("Affichage"));
    Ok je vais l'utilisé de suite pour voir

  11. #11
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    tiens c'est bizarre !!! je n'ai pas les mm longueurs pourtant ce sont les meme chaine ??

    10 9

  12. #12
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par insa59
    tiens c'est bizarre !!! je n'ai pas les mm longueurs pourtant ce sont les meme chaine ??
    Non, si les longueurs sont différentes, c'est que retour7 contient un caractère supplémentaire (peut-être invisible à l'écran).
    EDIT
    Pour le trouver:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    char *p;
     
    ...
    for (p=retour7;*p;++p) printf("%u ",(unsigned int) *p);
    printf("\n");
    for (p="Affichage";*p;++p) printf("%u ",(unsigned int) *p);
    printf("\n");

  13. #13
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    et je fais comment alors pour avoir une bonne comparaison???

  14. #14
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par insa59
    et je fais comment alors pour avoir une bonne comparaison???
    cf. mon post précédent édité.

  15. #15
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    Oui desolé je n'avais pas vue

    En effet j'ai fais ta methode et j'obtient cela

    65 102 102 105 99 104 97 103 101 10
    65 102 102 105 99 104 97 103 101
    ???

  16. #16
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Comme l'avait déjà dit Franck.H, il reste le '\n' (code 10) à la fin de retour7. Vous pouvez l'ôter ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    retour7[strlen(retour7)-1]=0;

  17. #17
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    okie merci ca fonctionne

    j'aurais juste besoin d'une ptit explication sur

    for (p=retour7;*p;++p) printf("%u ",(unsigned int) *p);
    printf("\n");
    je ne comprends pas comment elle fonctionne.

  18. #18
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par insa59
    j'aurais juste besoin d'une ptit explication...je ne comprends pas comment elle fonctionne.
    Ce bout de code utilise un pointeur (p) pour parcourir la chaîne et afficher un à un les codes des caractères contenus dans la chaîne. La boucle s'arrête quand *p==0 ce qui signifie que l'on a atteint la fin de la chaîne. Est-ce clair maintenant?

  19. #19
    Membre confirmé
    Inscrit en
    Février 2007
    Messages
    191
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 191
    Par défaut
    oui merci.

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

Discussions similaires

  1. Probleme de comparaison avec mysql_num_rows
    Par terry90 dans le forum MySQL
    Réponses: 7
    Dernier message: 22/07/2009, 20h25
  2. probleme de comparaison avec strcmp
    Par wolverine1987 dans le forum Visual C++
    Réponses: 20
    Dernier message: 18/06/2009, 11h48
  3. [Kylix] Probleme de séparateur avec Kylix2 ?
    Par jeanphy dans le forum EDI
    Réponses: 4
    Dernier message: 10/02/2003, 16h41
  4. Réponses: 12
    Dernier message: 23/10/2002, 11h56
  5. Probleme d'impression avec la méthode TForm->Print()
    Par Kid Icarus dans le forum C++Builder
    Réponses: 13
    Dernier message: 31/07/2002, 14h26

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