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

Dev-C++ Discussion :

Affichage d'un float dans une MessageBox


Sujet :

Dev-C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 92
    Points : 96
    Points
    96
    Par défaut Affichage d'un float dans une MessageBox
    Hello,

    Donc voilà, je programme en assembleur et n'y connais rien en C++,
    Là j'ai Dev-C++ et je teste. J'aimerai connaitre des petits détails concernant tous les différents types de variables.


    Par exemple, J'aimerai savoir comment afficher un nombre à virgule dans une messageBox.

    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
     
    #include <windows.h>
    #include <stdio.h>
     
    // Déclaration des prototypes de fonctions
     
    // Déclaration des variables globales
     
    char    szClassName[] = "Titre";
    float   nbVirg;
    float   nbVirg1 = 1.555;
    float   nbVirg2 = 5.4321;
    char    formatReel[] = "Format = %f";
    char    buffer[200];
     
    // Code du programme
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { 
       //MessageBox(NULL, (LPSTR) "Une Simple MessageBox", (LPSTR) szClassName, MB_ICONINFORMATION | MB_OK);
       nbVirg = nbVirg1*nbVirg2;
       char buffer = printf("Invalid value.The value must be between %f. and %f..Enter a new value", nbVirg1, nbVirg2);
       MessageBox(NULL, &buffer , (LPSTR) szClassName, MB_ICONINFORMATION | MB_OK);
       // si je met buffer au lieu de &buffer il me retourne une erreur de compilation
        return 0;
    }
    En fait, j'aimerai connaitre un peu tout ce qui concerne la manipulation des différents types de variables (char int float double void...)
    Par exemple comment transformer un 1.56(char) en 1.56(float) ou toute autre manipulation de ce genre.

    Ce serait déjà un bon début.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Petite correction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    std::ostringstream oss;
    oss << 3.5 << "ezrize" << 3.5;
    const char* pstr = oss.str().c_str();
    Tout ça est dans la FAQ

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Et bien, pour commencer, il y a de très bon cours de C dans les tutoriels.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Citation Envoyé par zais_ethael
    Et bien, pour commencer, il y a de très bon cours de C dans les tutoriels.
    Tu voulais sûrement dire "C++"

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Points : 1 053
    Points
    1 053
    Par défaut
    Citation Envoyé par Laurent Gomila
    Tu voulais sûrement dire "C++"
    Non, C.
    Son code est du C, et si il ne connait pas les types de base, c'est qu'il doit déja commencer à voir le C (je suis opposé à l'idée d'apprendre directement le C++, selon moi il y a de toutes façons beaucoup trop d'apis C qu'on est obligés d'utiliser directement sans passer par un wrapper).

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    On va essayer de ne pas ouvrir un n-ième débat "apprendre le C avant le C++ ?", il y en a déjà suffisamment sur ce forum.

    Les cours sont sur http://c.developpez.com/cours, aux gens de voir lequel ils préfèrent.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Et l'utilisation de MessageBox() est mauvaise.
    casts inutiles ou nuisibles, passage d'un char seul en paramètre...

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 92
    Points : 96
    Points
    96
    Par défaut
    Vous battez pas, le C ne m'intéresse pas plus que ça. (Même si les bases sont là). Sur vos conseils je vais retourner voir les tuts mais j'ai pas vu précisément un sujet qui traite des variables en particulier.

    Des bases en programmation (général) ça peu aller, c'est pour ça que je pense zapper l'étape C.

    Je programme depuis 10 ans en assembleur, et je connais parfaitement tout le petit monde des Messages Windows WM_ , les threads, les handles, la procédure de boucle de traitement des messages... WinMain, WinProc .... La structure des Fichiers PE Win32 et Le PE header et ses différents constituants (l'iat)....
    Je programme aussi en PHP et Flash AS2 depuis plusieurs années.
    Et je crack depuis autant de temps et connais environ 300 APIs windows.

    Le C je suis pas contre mais ce qui m'intéresse plus, c'est de pouvoir programmer aussi facilement en C++ qu'en asm, pour pouvoir retranscrire plus facilement certaines procédures d'un langage à un autre.

    Le fait de commencer par l'apprentissage de la manipulation des différents types de variables, c'est indispensable, enfin il me semble que c'est par là que je devrais commencer. Mais peut-être que vous, étant plus avisés que moi sur le sujet pensez à autre chose à voir avant ça..

    En aparté:

    Et l'utilisation de MessageBox() est mauvaise.
    Je vois pas ton argument, c'est pourtant super pratique et je dois pas être le seul à l'utiliser régulièrement pour voir telle ou telle valeur en retour ou pour posser un BPX dessus avec SoftIce ou retrouver un endroit facilement sous IDA. C'est peut-être simplement une habitude de d'asmmeur cependant. (J'aime bien aussi les BPINT 03h DO "r eip eip+1" pour breaker où je veux dans mes prog lors du débogage).

  9. #9
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 627
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 627
    Points : 30 689
    Points
    30 689
    Par défaut juste une petite remarque
    Salut,

    Bien que j'admire ceux qui sont en mesure de programmer efficacement en asembleur, il faut bien reconnaitre le fait que l'assembleur et les langages de troisème génération ne sont vraiment pas de la meme classe... bien que leur finalité soit identique:

    Autant l'assembleur est proche de la machine et loin du langage humain, autant les langages de troisième généartion (car c'est vrai pour tous, et pas uniquement pour le C ou le C++ ) sont proche du langage humain, et loin du langage machine.

    Du coup, certaines techniques tres utiles en assembleur deviennent parfaitement supperflues en langage de troisième génération:
    Tu es, par exemple, un niveau plus haut en L3G que le niveau qui nécessite l'utilisation de softice ou d'une interruption.

    De la meme manière, si les sauts, conditionnels ou non, sont légions en assembleur, les L3G fournissent quantité de moyen de s'en passer, même si, au final, ils réapparaitront dans le code machine

    Enfin, il faut garder en tete le fait que l'assembleur est, définitivement, tres dépendant de la platteforme sur laquelle il sera exécuté, alors que le but meme des L3G est de tendre vers une portabilité accrue, meme si cela passe par une étape de recompilation en fonction de la platteforme utilisée

    Ceci dit, à partir du moment où les structures de tests et de boucle ne te sont pas inconnues, je ne crois effectivement pas qu'il te faille, d'une manière ou d'une autre, passer par le C pour apprendre le C++...

    D'un autre coté, tu comprendras sans doute que l'on apporte énormément d'importance, si tu veux apprendre directement le C++, au fait d'utiliser de préférence les possiblités qu'il offre, au lieu de t'orienter vers celles qu'il hérite du C, et qui pose souvent problème , voire, que l'on essaye, autant que faire se peut, de t'inciter à avoir une optique plus "portable", car il n'y a pas, loin s'en faut, que windows comme système d'exploitation

    Ainsi, ce tout petit morceau de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int WINAPI WinMain (HINSTANCE hInstance, 
                    HINSTANCE hPrevInstance, 
                    LPSTR lpCmdLine, 
                    int nCmdShow) 
    {
    est, déjà horrible en soi, simplement parce qu'il va te forcer à utiliser l'api windows, et donc, te cantonner à porgrammer... pour windows...

    Déà que l'api windows, mais ce n'est qu'un avis personnel, est loin d'être la meilleure ...

    Enfin, tu as raison sur un point: quitte à commencer par quelque chose, autant commencer par apprendre à manipuler les types simples...

    Par type simple, étant donné que l'on parle ici du C++, il faut cependant accepter l'idée que certains type (finalement pas si simple que ca ) puissent etre considérés comme tels, bien qu'il s'agisse de classes...

    Parmis ceux-ci, on peut te parler des std::string (chaines de caractères), à préférer au tableaux de caractères C style ( char machaine[5] )
    les std:: istringstream et std::ostringstream qui permettent de tranformer facilement nimporte quel type en chaine et inversément, les std::ifstream et std::ofstream qui permettent de gérer facilement les fichiers, et les std::istream et std::ostream qui sont les flux d'entrée et de sortie

    tu trouveras dans la FAQ des précisions intéressantes sur l'ensemble de ces concepts

    Enfin, il faut savoir que les fonctions/instruction printf et associées sont des instructions C, et qu'on leur préférera sans doute les instructions cin ou cout et un petit passage par les *stringstream

    (au passage, dans le code que tu présentes, en C, on aurait sans doute préféré un sprintf qui permet de travailler sur les flux au printf qui, normalement, envoye la chaine sur la sortie standard (souvent l'écran) )

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Tu m'as mal compris: Je n'ai pas dit qu'il était mal d'utiliser MessageBox(), j'ai dit que tu l'utilisais mal.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 92
    Points : 96
    Points
    96
    Par défaut
    C'est très instructif ce que tu dis koala01.

    J'ignore tout de ceci :

    std::string (ça doit ressembler à celle de PHP cependant)
    std:: istringstream
    std::ostringstream
    std::ifstream
    std::ofstream
    std::ostream

    Mais si certains permettent de manipuler des variables c'est ça devient très intéressant.

    Par exemple quelque chose qui me gène beaucoup en C(ou C++) c'est qu'une fois une variable déclarée en tant qu'un type particulier je ne peux rien mettre d'autre dedans, et ça en asm y a aucun problème car tout est considéré comme des suites de bytes donc c'est facile de remplire n'importe quoi avec n'importe quelle valeur.

    Tien! aussi, en C++ par exemple, j'ai testé ceci:
    je déclare un buffer de 100 bytes (non définits)
    Et bien quand je veux placer un texte dedans il se produit une erreur à la compilation parce que ce que je souhaite y écrire n'est pas forcément de la taille des 100 bytes. Ca me paraît fou ce genre de détail.

    Enfin bon c'est de toute façon très intéressant d'apprendre tout ça, merci pour tes conseils, je vais y aller doucement. Bye


    Je reviens parce que vraiment... je vois pas comment afficher un nombre dans une MessageBox et ça m'est indispensable pour tester différents codes.
    Quand j'utilise printf, je suis désolé mais lui il ne me retourne rien de rien.

    (C++)
    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
     
     
    #include <windows.h>
    #include <stdio.h>
     
    // Déclaration des prototypes de fonctions
     
    // Déclaration des variables globales
     
    char    szClassName[] = "Titre";
    float   nbVirg;
    float   nbVirg1 = 1.555;
    float   nbVirg2 = 5.4321;
    char    buffer[200];
     
    // Code du programme
     
     
    int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { 
     
       nbVirg = nbVirg1*nbVirg2;
     
       char buffer[] = "Affichage de la valeur ici : %f", nbVirg;
       // je sais bien que c'est pas ça mais comment faire ?
       MessageBox(NULL, (LPSTR) buffer , (LPSTR) szClassName, MB_ICONINFORMATION | MB_OK);
     
        return 0;
    }

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    On peut savoir à quoi servent ces deux casts inutiles dans l'emploi de MessageBox() ?

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 92
    Points : 96
    Points
    96
    Par défaut
    Oups je suis pas certain de bien comprendre la question donc je vais peut-être répondre par une connerie.

    si tu parles des des deux (LPSTR), et bien pour l'instant je ne mis connais pas assez encore en C++ pour savoir quand et où je dois définir le type de variable, mais dans ce cas si je les enlève la compilation ne se fait pas, donc je les laisse, ça me va comme ça.


    Si c'est du nombre d'arguments que tu parles et bien l'API Win32 MessageBox est définit ainsi. Elle possède 4 arguments:
    - le handle de la fenêtre parente.
    - le contenu de la MessageBox.
    - le Titre.
    - et le type (nbr de boutons + Exclamation, interrogation, Attention...

    J'espère que je suis pas à côté, désolé sinon.

    J'ai toujours pas réussit à afficher un float dans cette box. J'ai bien pensé à utiliser l'api wsprintf mais elle n'accepte pas autre chose que des hexa ou des deci, domage.
    Si quelqu'un a une solution, je suis vraiment preneur. Bye.

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

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 379
    Points : 41 573
    Points
    41 573
    Par défaut
    Un LPSTR, c'est un bête char*.
    Tu peux me dire les erreurs de compilation que tu as sans les casts?

Discussions similaires

  1. Formater l'affichage d'un float dans une EditBox
    Par Kemanke dans le forum MFC
    Réponses: 7
    Dernier message: 14/12/2007, 11h06
  2. [VB.Net] Problème d'affichage de text dans une MessageBox
    Par eultartuffe dans le forum Windows Forms
    Réponses: 6
    Dernier message: 03/04/2006, 20h56
  3. [C#] Affichage d'un float dans un LABEL
    Par MaxiMax dans le forum ASP.NET
    Réponses: 2
    Dernier message: 27/07/2005, 17h59
  4. [JSP]probleme d'insertion float dans une table
    Par karamazov994 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 14/04/2005, 11h49
  5. Formater un float dans une requete
    Par Cedced dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 19/11/2004, 16h48

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