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

Visual C++ Discussion :

probleme de comparaison avec strcmp


Sujet :

Visual C++

  1. #1
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut probleme de comparaison avec strcmp
    Bonjour,

    je compare deux variables pour savoir si elles sont identiques mais mon code ne fonctionne pas!! pouvez vous jettez un petit coup d'oeil et me dire ce que je ne fais pas bien?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    				int result;
    				result = strcmp(m_valueDateArrivee, m_valueDateDebutSuspension);//On compare la date de rédaction de devis à la date de début de réparation
    				if(result = 0)
    				{
    					m_valueencoursuspendus.ShowWindow(SW_SHOW);
    					m_valuerectsuspendus.ShowWindow(SW_HIDE);
    					m_valuesuspendus.ShowWindow(SW_SHOW);
    					m_valueflechehautsusp.ShowWindow(SW_HIDE);
    					m_valueflechebassusp.ShowWindow(SW_SHOW);
     
    					m_valueencoursuspendus.SetWindowPos(NULL,180,240,150,18,SWP_DRAWFRAME);
    					m_valuesuspendus.SetWindowPos(NULL,200,260,150,18,SWP_DRAWFRAME);
    					m_valueflechebassusp.SetWindowPos(NULL,200,210,9,36,SWP_DRAWFRAME);
    				}

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 369
    Points
    50 369
    Par défaut
    Quels sont les types et les valeurs de m_valueDateArrivee et m_valueDateDebutSuspension.

    Tu as essayé de tracer avec le debugger ?

  3. #3
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Quels sont les types et les valeurs de m_valueDateArrivee et m_valueDateDebutSuspension.
    elles sont de types CString et leurs valeurs sont des dates!!

    Tu as essayé de tracer avec le debugger ?
    Oui, j'ai éssayé avec le debugger j'ai mis un point d'arret sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    result = strcmp(.....);
    j'ai obtenu une valeur de result = -858993460

    ensuite j'ai remis un point d'arret sur la ligne
    j'ai bien obtenu result = 0.

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 369
    Points
    50 369
    Par défaut
    Arf !! pas vu en première lecture, le piège classique :

  5. #5
    Membre émérite
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Points : 2 677
    Points
    2 677
    Par défaut
    depuis quand strcmp prend des CString en paramètre ?

    http://msdn.microsoft.com/en-us/library/e0z9k731(VS.80).aspx

    vu la valeur de retour tu aurais peut-être pu t'en douter, non ?




  6. #6
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    strcmp peut pendre des CString multi-bytes en paramètre vu que la CString fournit un opérateur const char *..
    En unicode il faut utiliser la bonne version de la fonction en C

    mais bon la c'est vraiment initule pour comparer deux CString, la classe dispose de tous les opérateurs de comparaison nécessaires.
    pourquoi faire compliquer quand on peut faire simple ?
    autres chose pour comparer des dates j'espere que tu compares seulement l'egalité sinon il faut renverser les dates ...

  7. #7
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Ok, avez vous d'autres solutions pour faire des comparaisons de date?

    Merci.

  8. #8
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    Problème lorsque je compare :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    result = strcmp(m_valueRedacDevis, m_valueDateDebutRep);//On compare la date de rédaction de devis à la date de début de réparation
    if(result < 0)
    la date de redac devis = 27/07/2006
    la date début réparation = 12/05/2008

    dans mon programme lorsque je lance executable celui ci ne passe pas dans ce morceau de prog pourtant la date de rédac devis est bien inférieure à date début réparation!!

    autres chose pour comparer des dates j'espere que tu compares seulement l'egalité sinon il faut renverser les dates ...
    Il faut que je renverse les dates?

    mais bon la c'est vraiment initule pour comparer deux CString, la classe dispose de tous les opérateurs de comparaison nécessaires
    .

    Quelles sont ces opérateurs?

  9. #9
    Membre émérite
    Avatar de TheGzD
    Homme Profil pro
    Ingénieur/ Docteur en Informatique
    Inscrit en
    Avril 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Ingénieur/ Docteur en Informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 327
    Points : 2 677
    Points
    2 677
    Par défaut
    Il faut que je renverse les dates?
    lit la doc de strcmp

    Quelles sont ces opérateurs?
    lit la doc de CString

    ...

  10. #10
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Explique moi car je ne comprend pas pourquoi je ne peux pas utiliser cette fonction?

  11. #11
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Il faut que j'utilise les CString Comparaison Operators?

  12. #12
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Ok, c'est vrai que la fonction strcmp ne sert à rien!

    J'ai juste à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(m_valueRedacDevis > m_valueDateDebutRep)
    {
         blablabla;
    }
    Mais bon j'ai toujours mon problème avec mes dates?

  13. #13
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Renverser une date ce n'est quand pas le bout du monde !
    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
    CString InversDate(LPCTSTR szDate,bool bFullDat=true)
    {
        CString str=szDate;
        if(bFullDate && str.GetLength()!=8) return _T("");
        if(!bFullDate && str.GetLength()!=6) return _T("");
    
        CString strInv;
        strInv=str.Right(bFullDat?4:2); // Année
        strInv+=str.Mid(2,2);            // Mois
        strInv+=str.Left(2,2);        // jour
    
        return strInv;
    }
    CString str=_T("10062009");
    str=InversDate(str);
    
    if(InversDate(m_valueRedacDevis) > InversDate(m_valueDateDebutRep))
    {
    //     blablabla;
    }
    je n'ai pas compilé ce code, mais ça devrait être correcte .

  14. #14
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Merci.
    J'ai une erreur lors de la compilation :
    error C2601: 'InversDate' : local function definitions are illegal

  15. #15
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    Monsieur wolverine1987, il n'est pas interdit de consulter la documentation du compilateur quand on à une erreur !
    Citation Envoyé par MSDN
    Message d'erreur

    'fonction' : définitions de fonctions locales non conformes
    'function' : local function definitions are illegal
    Le code essaie de définir une fonction à l'intérieur d'une fonction
    ou alors votre code source contient peut-être une accolade supplémentaire avant l'endroit de l'erreur C2601.
    L'exemple suivant génère l'erreur C2601 :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // C2601.cpp
    int main() {
       int i = 0;
     
       void funcname(int j) {   // C2601
          j++;
       }
    }

  16. #16
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Pourquoi lorsque je compare mes dates, par exemple :
    la date de redac devis = 27/07/2006
    la date début réparation = 12/05/2008

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(m_valueRedacDevis < m_valueDateDebutRep)
    {
    }
    et ensuite si je fais la comparaison inverse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    if(m_valueRedacDevis > m_valueDateDebutRep)
    {
    }
    et bien le programme ne rentrera jamais dans la première condition mais il ira tjrs dans la deuxième? je ne comprend pas ce que fais le logiciel? Es ce que c'est pour cela qu'il faut inverser les dates?

  17. #17
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    Ok. J'ai éssayé ton programme!

    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
    CString InversDate(LPCTSTR szDate,bool bFullDat=true)
    {
    	CString str=szDate;
    	if(bFullDat && str.GetLength()!=8) return _T("");
    	if(!bFullDat && str.GetLength()!=6) return _T("");
     
    	CString strInv;
    	strInv=str.Right(bFullDat?4:2); // Année
    	strInv+=str.Mid(2,2);            // Mois
    	strInv+=str.Left(2);        // jour
     
    	return strInv;
    }
    CString str=_T("10062009");
    str=InversDate(str);
    J'ai compiler une première fois j'ai eu l'erreur C2601, j'ai donc déplacer le code pour ne plus avoir cette erreur. J'avais d'autres erreurs dans la condition du if bFullDat avait un 'e' donc ca ne fonctionnais pas!
    La fonction Left ne prend pas 2 paramètres j'ai donc retiré un 2.

    il faut donc dans ce code que je remplace str par ma variable sauf que j'ai une erreur avec str lorsque je compile.
    Les causes possibles sont :
    Faute d'orthographe ou erreur de majuscule.
    Spécificateur de type manquant dans la déclaration de l'identificateur.

    Je ne comprend pas la deuxième cause possible?Pouvez vous m'expliquer pour que je compile.

  18. #18
    Rédacteur
    Avatar de farscape
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    9 055
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2003
    Messages : 9 055
    Points : 17 323
    Points
    17 323
    Par défaut
    on ne peut pas répondre sans voir le code et la ligne concernée .

  19. #19
    Débutant
    Inscrit en
    Avril 2009
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Avril 2009
    Messages : 133
    Points : 50
    Points
    50
    Par défaut
    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
    CString InversDate(LPCTSTR szDate,bool bFullDat=true)
    {
        CString str=szDate;
        if(bFullDate && str.GetLength()!=8) return _T("");
        if(!bFullDate && str.GetLength()!=6) return _T("");
    
        CString strInv;
        strInv=str.Right(bFullDat?4:2); // Année
        strInv+=str.Mid(2,2);            // Mois
        strInv+=str.Left(2,2);        // jour
    
        return strInv;
    }
    CString str=_T("16062009");
    str=InversDate(str);
    les erreurs sont :
    error C2065: 'bFullDate' : undeclared identifier
    error C2660: 'Left' : function does not take 2 parameters
    error C2501: 'str' : missing storage-class or type specifiers
    error C2371: 'str' : redefinition; different basic types
    see declaration of 'str'
    Voila les erreurs dans l'ordre avec les lignes rouges correspondantes.

  20. #20
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 369
    Points
    50 369
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CString InversDate(LPCTSTR szDate,bool bFullDat=true)
    Sur mon compilateur, cela ne passe pas (=true), c'est valide dans la partie déclaration (.h) mais pas dans la définition (.cpp)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    error C2065: 'bFullDate' : undeclared identifier
    bFullDate ou bFullDat ?

    Cela ressemble à du code en dehors de toute fonction, c'est pas très autorisé

Discussions similaires

  1. comparaison avec la fonction STRCMP
    Par kira9744 dans le forum MATLAB
    Réponses: 2
    Dernier message: 19/04/2011, 13h33
  2. Probleme de comparaison avec mysql_num_rows
    Par terry90 dans le forum MySQL
    Réponses: 7
    Dernier message: 22/07/2009, 21h25
  3. problem de comparaison strcmp()
    Par ostie127 dans le forum Débuter
    Réponses: 8
    Dernier message: 16/02/2008, 11h47
  4. Probleme de comparaison avec un if
    Par insa59 dans le forum C
    Réponses: 18
    Dernier message: 05/04/2007, 11h57
  5. comparaison avec strcmp
    Par je®ome dans le forum C
    Réponses: 9
    Dernier message: 23/05/2006, 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