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:
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.
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 :D, 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 :D
Ainsi, ce tout petit morceau de code:
Code:
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 :P...
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 :P) 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) ;) )