Ah tiens j'avais même pas remarqué que description était de type char et non pas char* ...
emykev22, tu vas devoir réapprendre les bases !
Ah tiens j'avais même pas remarqué que description était de type char et non pas char* ...
emykev22, tu vas devoir réapprendre les bases !
Et les bases, ce n'est pas char*, c'est std::string. Un programme qui contient un char*, c'est un programme qui contient probablement un bug ou une limitation, et si ce n'est pas le cas, c'est une programme qui a trois fois trop de lignes de code par rapport à ce qu'il devrait être.
Quand je vois char* dans un code, je le vire au plus vite !
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Sans compter que char*s = "abc"; n'est pas const-correct etje ne suis même pas sûr que C++ l'accepte.
Edit: Visual 2005 et 2010 l'acceptent sans broncher, gcc 4.7.1 donne "warning: deprecated conversion from string constant to 'char*' [-Wwrite-strings]" (apparemment, il suppose -Wwrite-strings quand il compile en C++).
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.
Merci pour l'aide je suis débutante en c++ ..
j'ai essayé vos solution sans résultat ....
voici le code j'ai peut-etre mal declarée le messagebox... voulez vous regarde de ce cote la... S.V.P.
Peut-etre que le nbr ne s'affiche pas a cause d'une mauvaise declaration de la fenetre popup
car j'ai essayé plusieurs solution std::string,%d, std::to_string ne compile pas,change int pour char et sans resultat... je cheche encore la solution...
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171 #include <exception> #define ID_B_Fumeur 0 #define ID_B_nFumeur 1 //varible globale #define ID_B_QUITTER 2 #define ID_B_complet 3 //initialisation après coup #define ID_B_description "Vous etes dans l'autobus" #define ID_B_nbrpersonne cpt_f_passager.size() #define ID_B_cFumeur 4 //"Desole L'autobus des Fumeurs est complet" #define ID_B_cnFumeur 5 // "Desole L'autobus des Non Fumeurs est complet" #define ID_B_AFumeur //" Vous etes dans un autobus Fumeur" #define ID_B_AnFumeur // " Vous etes dans un autobus Non Fumeur" #define ID_B_nbrPassager 6 //"Nombre de passager dans l'autobus: " std::list<char> cpt_f_passager; std::list<char> cpt_nf_passager; HINSTANCE instance; LRESULT CALLBACK procedureFenetrePrincipale(HWND, UINT, WPARAM, LPARAM); LRESULT CALLBACK procedureFenetreReponse(HWND, UINT, WPARAM, LPARAM); int WinMain (HINSTANCE cetteInstance, HINSTANCE precedenteInstance, LPSTR lignesDeCommande, int modeDAffichage) { HWND fenetrePrincipale; MSG message; WNDCLASS classeFenetre; HMENU menu, sousMenu; instance = cetteInstance; sousMenu = CreateMenu(); AppendMenu(sousMenu,MF_STRING,ID_B_Fumeur,"Fumeur"); AppendMenu(sousMenu,MF_SEPARATOR, (UINT)NULL, ""); AppendMenu(sousMenu,MF_STRING,ID_B_nFumeur,"Non Fumeur"); AppendMenu(sousMenu,MF_SEPARATOR, (UINT)NULL, ""); AppendMenu(sousMenu,MF_STRING,ID_B_QUITTER,"Quitter"); menu = CreateMenu(); AppendMenu(menu, MF_POPUP, (UINT)sousMenu, "Actions"); classeFenetre.style = 0; classeFenetre.lpfnWndProc = procedureFenetrePrincipale; classeFenetre.cbClsExtra = 0; classeFenetre.cbWndExtra = 0; classeFenetre.hInstance = NULL; classeFenetre.hIcon = LoadIcon(NULL, IDI_APPLICATION); classeFenetre.hCursor = LoadCursor(NULL, IDC_ARROW); classeFenetre.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE); classeFenetre.lpszMenuName = NULL; classeFenetre.lpszClassName = "classeF"; HWND fenetrePrincipaleR; MSG messageR; WNDCLASS classeFenetreR; HMENU menuR, sousMenuR; instance = cetteInstance; AppendMenu(sousMenuR,MF_STRING, ID_B_cFumeur, "Desole L'autobus des Fumeurs est complet"); AppendMenu(sousMenuR,MF_STRING, ID_B_cnFumeur, "Desole L'autobus des Non Fumeurs est complet"); AppendMenu(sousMenuR,MF_SEPARATOR, (UINT)NULL, ""); AppendMenu(sousMenuR,MF_STRING, ID_B_Fumeur, " Vous etes dans un autobus Fumeur"); AppendMenu(sousMenuR,MF_STRING, ID_B_nFumeur, " Vous etes dans un autobus Non Fumeur"); AppendMenu(sousMenuR,MF_STRING, ID_B_nbrPassager, "Nombre de passager dans l'autobus: "+nbr); AppendMenu(menuR, MF_POPUP, (UINT)sousMenuR, " Choisir l'autobus Fumeur ou Non Fumeur"); sousMenuR = CreateMenu(); AppendMenu(sousMenuR,MF_STRING,ID_B_Fumeur,"Fumeur"); AppendMenu(sousMenuR,MF_SEPARATOR, (UINT)NULL, ""); AppendMenu(sousMenuR,MF_STRING,ID_B_nFumeur,"Non Fumeur"); AppendMenu(sousMenuR,MF_SEPARATOR, (UINT)NULL, ""); AppendMenu(sousMenuR,MF_STRING,ID_B_QUITTER,"Quitter"); menuR = CreateMenu(); AppendMenu(menuR, MF_POPUP, (UINT)sousMenuR, "Actions"); classeFenetreR.style = 0; classeFenetreR.lpfnWndProc = procedureFenetrePrincipale; classeFenetreR.cbClsExtra = 0; classeFenetreR.cbWndExtra = 0; classeFenetreR.hInstance = NULL; classeFenetreR.hIcon = LoadIcon(NULL, IDI_APPLICATION); classeFenetreR.hCursor = LoadCursor(NULL, IDC_ARROW); classeFenetreR.hbrBackground = (HBRUSH)(1 + COLOR_BTNFACE); classeFenetreR.lpszMenuName = NULL; classeFenetreR.lpszClassName = "classeR"; // On prévoit quand même le cas où ça échoue if(!RegisterClass(&classeFenetreR)) return FALSE; fenetrePrincipaleR = CreateWindow("classeR", "Ma premiere fenetre !", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 160, 70, NULL, menu /* Ou LoadMenu(instance, "ID_MENU")*/, cetteInstance, NULL); if (!fenetrePrincipaleR) return FALSE; ShowWindow(fenetrePrincipale, modeDAffichage); UpdateWindow(fenetrePrincipale); while (GetMessage(&message, NULL, 0, 0)) { TranslateMessage(&message); DispatchMessage(&message); } return message.wParam; } LRESULT CALLBACK procedureFenetrePrincipale(HWND fenetrePrincipale, UINT message, WPARAM wParam, LPARAM lParam) { static HWND boutons[2] = {NULL}; switch (message) {case WM_CREATE: boutons[0] = CreateWindow("BUTTON", "Fumeur", WS_CHILD | WS_VISIBLE, 50, 40, 383, 30, fenetrePrincipale, (HMENU)ID_B_Fumeur, instance, NULL); boutons[1] = CreateWindow("BUTTON", "Non Fumeur", WS_CHILD | WS_VISIBLE, 50, 100, 383, 30, fenetrePrincipale, (HMENU)ID_B_nFumeur, instance, NULL); boutons[2] = CreateWindow("BUTTON", "Quitter", WS_CHILD | WS_VISIBLE, 50, 160, 383, 30, fenetrePrincipale, (HMENU)ID_B_QUITTER, instance, NULL); break; case WM_COMMAND: switch(LOWORD(wParam)) {case ID_B_Fumeur: cpt_f_passager.push_back(1); if ( (cpt_f_passager.size() > 3) ) {MessageBox(fenetrePrincipale," L'autobus est complete: ","Désole ", MB_ICONINFORMATION); break; } else{ CHAR nbr = cpt_f_passager.size(); //SI JE CHANGE INT NBR POUR CHAR NBR ,LE RESULTAT EST LE MEME AUCUN NBR S'AFFICHE // le nbr ne n'affiche pas non plus MessageBox(fenetrePrincipale, (("%d",nbr)," le nombre de passager est: "), " Vous êtes dans un autobus Fumeur", MB_ICONINFORMATION); //de cette facon pas plus de resultat a l'ecran // MessageBox(fenetrePrincipale, ((nbr)," le nombre de passager est: "), " Vous êtes dans un autobus Fumeur", MB_ICONINFORMATION); //string LE NBR NE S'AFFICHE PAS // MessageBox(fenetrePrincipale,std::string( cpt_nf_passager.size())+" Fumeur le nombre de passager est: " + std::string(cpt_nf_passager.size()), " Vous etes dans un autobus", MB_ICONINFORMATION); break; } case ID_B_nFumeur: cpt_nf_passager.push_back(1); if ( (cpt_nf_passager.size() > 3) ) {MessageBox(fenetrePrincipale," L'autobus des Non Fumeurs est complète: ","Désole ", MB_ICONINFORMATION); break; } else{ char nbr = cpt_nf_passager.size(); MessageBox(fenetrePrincipale,(("%d",nbr), " le nombre de passager est:")," Vous êtes dans un autobus Non Fumeur ",MB_ICONINFORMATION); break; } case ID_B_complet: MessageBox(fenetrePrincipale,"Désole ", " L'autobus est complète: " , MB_ICONINFORMATION); break; case ID_B_QUITTER: // ID_B_QUITTER = "Au Revoir " SendMessage(fenetrePrincipale, WM_DESTROY, 0, 0); break; } } }
Et si tu lisais les réponses des autres au lieu de tester n'importe quoi ?
On t'a dit que le %d était à oublier, y'a quoi que tu comprends pas là-dedans ?
Moi en tout cas je laisse tomber, bonne chance aux autres !
PS: on donne de notre temps à lire, réfléchir et répondre à des problèmes, et ceux qui les posent ne sont même pas foutus de lire les réponses ... donc oui je rage
Désole mais qu'est-ce que je n'ai pas compris là...
j'ai bien lu vos message et fait ce qui a été indique...
Relis les messages #2, #3 et #4
On t'as dit d'OUBLIER %d, ce n'est pas valide en C++ !
Soit tu codes en C et tu es dans la mauvaise section, soit tu dormais en même temps de lire tes cours de C++...
Et privilégie les std::string aux char*..
J'suis débutant mais je sais déjà ça. Et je comprends the Hound, quand on pose une question et qu'on n'écoute pas les réponses, y'a aucun intérêt à poser la question.
On perd de notre temps pour t'aider, si tu t'en fous complet de ce qu'on te dit, c'est pas la peine de continuer ce sujet..
Cordialement.
EDIT : Et y'a une différence entre débutant et abruti.. excusez-moi mais ça me démangeais de le dire.
L'énervement ne sert à rien.
Par contre, rappeler que nous sommes des bénévoles, heureux d'aider, mais limité par notre charte d'usage, est utile.
D'ailleurs la dite charte m'encourage fortement à dire ceci.
Nous disposons d'une FAQ (que j'estime excellente), mise à jour tout récemment, sur le C++.
Je t'invite à lire les sections sur la manipulation de chaines, et de flux.
Tu y trouveras notamment des exemples parlant de ostringstream.
Fais un programme minimal, qui se contente d'afficher une message box avec une chaine et un nombre.
D'une manière générale, sache que ton compilateur est un programme, donc moins intelligent que toi.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 #include <sstream> #include "ce qui va bien pour message box" int main() { //du code d'initialisation, créant fenetrePrincipale, entre autre; std::ostringstream oss; oss << "au le beau nombre: " << 4; MessageBox(fenetrePrincipale,oss.str(),MB_ICONINFORMATION); return 0; }
Il est systématique, et ne compile que ce qui est écrit, comme c'est écrit.
A toi de comprendre ce que tu écris, pas ce que tu espères que ca fera.
Pour ca, il n'y a que deux choses à faire.
connaitre le langage (essentiellement savoir déterminer le type d'une expression et ses effets de bord)
lire et comprendre la documentation des bibliothèques qu'on manipule.
Autrement dit, sans faire de recherche, tu dois pouvoir répondre aux deux questions suivantes:
- quelle est la signature de la fonction MessageBox?
- que signifient ses arguments.
Et ce, pour toutes les fonctions que tu utilises.
Si tu ne sais pas, tu te renseignes avant d'écrire ton code, parce que lui ne saura pas t'aider.
C'est comme en français. Si tu fais une phrase avec un mot dont tu ignores le sens, tu ne te feras pas comprendre.
"C'est pas très crocodile tout ça." hommage à un ami et son jeu...
Pour le C++ et la STL, je te recommande cppreference.com
Mes principes de bases du codeur qui veut pouvoir dormir:Pour faire des graphes, essayez yEd.
- Une variable de moins est une source d'erreur en moins.
- Un pointeur de moins est une montagne d'erreurs en moins.
- Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
- jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
- La plus sotte des questions est celle qu'on ne pose pas.
le ter nel est le titre porté par un de mes personnages de jeu de rôle
J'ai presque peur de pose d'autre question...mais je comprends leur frustration ....
Ces langages c++ , java et basedonnes Mysql avec leur logiciels , tout ca c'est nouveau pour moi . Oui je peux être a cote de la traque désolé pour votre temps MERCI pour tout.
Voici lorsque je compile ton code l'erreur que j'ai;
error: cannot convert 'std::basic_ostringstream<char>::__string_type {aka std::basic_string<char>}' to 'LPCSTR {aka const char*}' for argument '2' to 'int MessageBoxA(HWND, LPCSTR, LPCSTR, UINT)'|
Dans le code proposé, remplace oss.str() par oss.str().c_str().
En effet, la fonction .str d'un flux retourne un std::string (le std::basic_string<char> de ton message d'erreur), mais ta fonction demande un const char*. Et la fonction c_str de la classe string permet de retourner un pointeur sur les caractères qu'elle contient.
Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.
Oui sa compile avec ta solution.
Le nombre s'affiche au bout de texte OF...
Le langage c++ est très complexe et il y a énormément de détail.
Gros merci encore…
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager