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 :

Problème pour retrourner une valeur


Sujet :

C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut Problème pour retrourner une valeur
    Bonjour,

    Voila deux jour que j'essaie de faire une fonction "ERREUR" mais j'ai un problème et je ne trouve rien.

    Donc désespérément je me tourne vers vous.

    Je vous explique donc mon problème.
    Je souhaite définir des erreurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #define NO_ERR  0x00000001
    #define ERROR_1 0x00000002
    #define ERROR_2 0x00000004
    #define ERROR_3 0x00000008
    .
    .
    .
    #define ERROR_31 0x80000000
    Dans l'application d'un bouton je vérifie les valeurs contenues dans 2 EDIT
    Si la valeur contenu dans l'EDIT dépasse une certain valeur alors je lui affecte une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void __fastcall TMainForm::btnValiderClick(TObject *Sender)
    {
    int ERR=NO_ERR;
    .
    .
    .
    if (duree < 1 || duree > 1000)
          ERR |= ERROR_3;
    .
    .
    .
     
    et puis a la fin je met un return (ERR);
    }
    Mais je ne peux pas... pkoi??
    PS : je traville sous C++ Builder 6

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Parce que ta fonction est marquée comme ne retournant rien (void) ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    oui je suis d'accord mais si je mets un int TMainForm::btnValiderClick(TObject *Sender)
    il me dis que ça ne marche pas comme ça !!!

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    Faut il changer le ModalResult du boutton??

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Mais cette fameuse erreur, tu cherches à la retourner à qui exactement ?
    À la fonction qui appelle la boîte de dialogue modale ? Directement à l'affichage ?
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    Directement à l'affichage...

    Exemple que l'on me dise ERREUR Valeur trop grande.

    Voila la solution de facilité en utilisant des if, else... et puis switch case.
    Mais j'ai 31 erreur possible... donc ça serait vraiment pas joli lol.


    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
    void __fastcall TForm1::ValiderClick(TObject *Sender)
    {
       double amplitude, duree, total;
       int erreur;
     
       amplitude = Amplitude->Text.ToDouble();
       duree = Duree->Text.ToDouble();
     
       if (amplitude < 0 || amplitude > 12)
       {
          if (duree < 1 || duree > 1000)
          erreur = 3;
          else
          erreur = 1;
       }
       else if (duree < 1 || duree > 1000)
       erreur = 2;
       else erreur = 0;
     
       switch(erreur)
       {
          case 1:
          {
             ShowMessage ("L'amplitude doit être comprise entre"
             " 0 et 12 Volts");
             break;
          }
          case 2:
          {
             ShowMessage ("La durée des impulsions doit être comprise entre"
             " 0 et 1000 ms");
             break;
          }
          case 3:
          {
             ShowMessage ("L'amplitude doit être comprise entre 0 et 12 Volts"
             "\net la durée des impulsions doit être comprise entre"
             " 0 et 1000 ms");
             break;
          }
          default:

  7. #7
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Dans ce cas, tu n'as aucun return à faire: Tu affiches directement dans ton handler de message.

    Le mieux, c'est de faire une string, regarder tous les bits de ERR, et y ajouter le message correspondant à chaque bit. Puis, afficher le tout...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    Bonne idée... je vais essayer mais le résultat n'est pas assurer lol

    Donc l'idéal est de créer un String ERR puis d'ajouter toutes les erreurs et
    à la fin je fais un ShowMessange(ERR)

    Cette technique marche si j'ai 2 boutons différents qui vérifient des valeurs différentes?? donc ils donnent des erreurs différentes style valeur1 bouton 1 faux et valeur 2 bouton 2 faux dans le meme message??

  9. #9
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Ben non, tu sauras seulement que les deux erreurs sont présentes, mais pas quelle champ a provoqué quelle erreur...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    C'est donc la, la faiblesse de cette méthode.
    Car j'aimerai bien indiquer sur quel champs la personne c'est trompée
    et non avoir qu'un message identique pour tous.

    Comment je serais au fait que les 2 erreurs sont présentes??

    Vois tu une autre solution sinon??

  11. #11
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Citation Envoyé par fmr130 Voir le message
    Comment je serais au fait que les 2 erreurs sont présentes??
    Ben, parce que ce sont des flags
    Vois tu une autre solution sinon??
    Une liste de couples { erreur, champ } ou un truc du genre...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    Si j'obtiens un truc comme Erreur Durée et Erreur Amplitude sur l'affichage, cela me va!!!

    Merci je vais pas plus t'embeter...
    je vais voir ça...

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 50
    Par défaut
    J'ai trouver une solution...

    Il faut créer une methode dans la classe en question

    style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    public:		// Déclarations de l'utilisateur
       void __fastcall GestionErreur(error);
    puis faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    enum Erreur {ERROR_Amplitude, ERROR_Duree, ERROR_Ampli_Duree};
    Dans ma méthode je met
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    void __fastcall TMainForm::GestionErreur(error)
    {
       switch(error)
       {
          case ERROR_Amplitude: ShowMessage ("Amplitude\n");
             break;
          case ERROR_Duree:ShowMessage ("Durée\n");
             break;
          case ERROR_Ampli_Duree: ShowMessage ("Amplitude et Durée\n");
             break;
          default: ShowMessage ("Erreur inconnue.");
             break;
       }
    }
    et enfin dans mon bouton je fais:

    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
    void __fastcall TMainForm::btnValiderClick(TObject *Sender)
    {
       double amplitude, duree, total;
     
       amplitude = edtAmplitude->Text.ToDouble();
       duree = edtDuree->Text.ToDouble();
     
       if ((amplitude < 0 || amplitude > 12) && (duree < 1 || duree > 1000))
          GestionErreur(ERROR_Ampli_Duree);
     
       if (duree < 1 || duree > 1000)
          GestionErreur(ERROR_Duree);
     
       else if ((amplitude < 0) || (amplitude > 12))
          GestionErreur(ERROR_Amplitude);

    il reste néanmoins un problème... la il n'y a que 2 boites Edit donc 3 possibilités. Mais s'il y a 4 boites Edit il y a 24 solutions je crois!!! bref facile, d'oublier un cas... Quelqu'un à une idée??? pour simplifier... faire apparaitre toutes les erreurs dans la même fenêtre et en même temps?
    Par exemple pour le cas de 2 boites Edit faire une instruction pour ERROR_Duree et une pour ERROR_Amplitude. La troisième c'est à dire ERROR_Ampli_Duree... doit apparaitre sans mettre le cas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     if ((amplitude < 0 || amplitude > 12) && (duree < 1 || duree > 1000))
          GestionErreur(ERROR_Ampli_Duree);

Discussions similaires

  1. Problème pour récupérer une valeur
    Par matdev62 dans le forum Développement
    Réponses: 3
    Dernier message: 15/09/2009, 15h07
  2. [Zend_Session] Problème pour passer une valeur
    Par yosraisi dans le forum Autres composants
    Réponses: 2
    Dernier message: 05/05/2008, 11h27
  3. Réponses: 4
    Dernier message: 04/11/2007, 13h46
  4. Problème pour définir une valeur dans la base des registres
    Par hellspawn_ludo dans le forum Dreamshield
    Réponses: 2
    Dernier message: 30/09/2007, 03h03
  5. problème pour récupérer une valeur dans ma bd (débutante)
    Par auryn111 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 26/08/2005, 17h49

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