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 :

�valuation de l'instruction if [D�butant(e)]


Sujet :

C

  1. #1
    Membre �clair� Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    F�vrier 2004
    Messages
    557
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Paaaaaa

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 557
    Par d�faut �valuation de l'instruction if
    Bonjour,

    J'essai de r�alis� un petit pgm qui recherche un index (dans un fichier) correspondant � l'argument pass� lors de l'ex�cution du pgm.

    Pour trouver cet index, je compare l'argument avec une portion de string du fichier. Cependant lors de la comparaison par l'instruction if, celui-ci ne fonctionne jamais (pas d�galit� trouv�), bien qu'a l'affichage de l'argument et du string il soient identiques.
    j'ai test�
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    if (argv[1] == pdeb)
    {
    ----
    }
    /* est egalement */
    if (argv[1] = pdeb)
    {
    ----
    }
    dans le premier cas la condition n'est jamais vrai, dans le second elle est toujours vrai.

    exemple du fichier
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    6360144 MZ01MA0 
    29981132 KS01MCO
    38204659 A213MA0
    79362290 OZ01MCO
    exemple d'un argument
    J'avoue ne pas comprendre pourquoi cela ne fonction pas, est'il possible de comparer des chaines string avec l'instruction if ?
    voici mon code
    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
     
    #include <stdio.h>               
    #include <stdlib.h>              
    #include <errno.h>               
    #include <string.h>                         
    int main(int argc, char *argv[]) 
    {            
    int rec = 0;                                    /*compteur de reccord */
    int c = 0;                                                 /*compteur */
    int LenI = 0;                                 /* taille de l'enreg    */
    int LenC = 0;                                 /* taille des parametres*/
    int Len = 0;                                     /* taille de l'index */
    char *pdeb = NULL;                                       /* pointeur  */
    char LPARCPC[20]="";                                /* nom LPAR + CPC */
    char RECINDX[85] = "";                            /* enreg du fichier */
    char INDEX[20] = "";                               /* INDEX de la MIB */
    FILE *findx;                       /* pointeur pour fichier parametre */
    findx = fopen("dd:SYSMIB","r");               /* ouverture du fichier */
    if (findx != NULL)                                  /* test ouverture */
     {                                                                      
      printf(" argv[1]  :%s\n",argv[1]);                                    
      while(fgets(RECINDX,80,findx) != NULL)             /* lit le fichier*/
        {                                                                    
           c = 0;                                      /* init du compteur */
           pdeb = strchr(RECINDX,' ');                 /*recherche LPARCPC */
           char *cn = strchr(pdeb,'\n');                  /*recherche '\n' */
           if ( cn != NULL)                                                  
            {                                                                
             *cn = '\0';                                                     
            }                                                                
           pdeb = pdeb+1;      /* avance d'un carctere pour eviter  espace*/ 
           printf(" LPAR CPC :%s\n",pdeb);                                   
           if (argv[1] == pdeb)                                              
          {                                                                
             printf(" coucou \n ");                                        
             LenI = strlen(RECINDX);                /* taille du reccord */
             LenC = strlen(pdeb);                   /* taille LPARCPC */   
             Len = LenI - LenC;                     /* taille de l'index */
             printf(" rec : %s\n",RECINDX);                                
             for (c=0;c<Len;c++)                                           
               {                                                           
               INDEX[c] = RECINDX[c];         /* constitution de lindex */ 
               }                                                           
             printf("INDEX : %s\n",INDEX);                                 
          } /* fin du if argv[1] */                                        
       }                                                                   
     }                                                                     
     return(0);                                                            
    } /* fin du main*/

  2. #2
    Membre �m�rite Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Par d�faut
    La comparaison de cha�ne de caract�res se fait avec la fonction strcmp() et non pas avec "=="

  3. #3
    Membre �clair� Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    F�vrier 2004
    Messages
    557
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Paaaaaa

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 557
    Par d�faut
    C'est vrai que �a marche beaucoup mieux, , j'ai pas encore tout les bon r�flexes (choix des bonnes instructions).
    J'ai refais mon if mais sur la valeur retourn�e par strcmp() est �a marche.

    Merci beaucoup

  4. #4
    Membre �m�rite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par d�faut
    Peut-�tre veux-tu comprendre pourquoi tes deux tentatives renvoyaient vrai ou faux ?
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    if (argv[1] == pdeb)
    {
    ----
    }
    Dans ce cas, tu compares l'adresse du premier caract�re de argv[1] avec l'adresse du premier caract�re de pdeb. Dans le cas de ton programme, ces adresses sont bien �videmment diff�rentes (m�me si le caract�re point� est le m�me dans les deux cas).
    Ton test renvoie donc faux.

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
     
    if (argv[1] = pdeb)
    {
    ----
    }
    Dans ce cas, tu effectues une affectation et non une comparaison. L'op�rateur d'affectation a pour particularit� de renvoyer la valeur affect�e. Tu testes donc si la valeur est diff�rent de 0 ou non. Dans ton cas, puisque pdeb n'est plus nul, le test renvoie vrai.

  5. #5
    Membre �clair� Avatar de SPACHFR
    Profil pro
    Paaaaaa
    Inscrit en
    F�vrier 2004
    Messages
    557
    D�tails du profil
    Informations personnelles :
    Localisation : France, Paris (�le de France)

    Informations professionnelles :
    Activit� : Paaaaaa

    Informations forums :
    Inscription : F�vrier 2004
    Messages : 557
    Par d�faut
    merci pour cette precision, car j'allais justement poser la question.
    Je pensais (� tort) que le caract�re '=' �tait un caract�re d'affection mais hors instructions d'�valuation type if(---).
    Bref cette pr�cison est utile, du plus j'ai appris encore quelque chose...un petit pas de plus...

    Merci

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. Instructions ROL et ROR
    Par bigbang dans le forum Assembleur
    R�ponses: 13
    Dernier message: 01/03/2003, 02h06
  2. Passer de la zone d'�dition vers une instruction sql
    Par tripper.dim dans le forum C++Builder
    R�ponses: 2
    Dernier message: 27/11/2002, 14h44
  3. Instruction pour cr�er un fichier text ???
    Par Soulsurfer dans le forum Langage
    R�ponses: 2
    Dernier message: 06/08/2002, 11h17
  4. [Crystal Report][VB6] instruction PrintReport
    Par yyyeeeaaahhh dans le forum SDK
    R�ponses: 4
    Dernier message: 29/07/2002, 14h58
  5. [TASM] Probl�me concernant l'instruction LGDT
    Par Ninkosen dans le forum Assembleur
    R�ponses: 3
    Dernier message: 15/07/2002, 19h09

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