Pourquoi sa se ferme???

Fermé
LordPierre Messages postés 9 Date d'inscription mardi 14 octobre 2003 Statut Membre Dernière intervention 18 octobre 2003 - 14 oct. 2003 à 10:07
 Bob - 16 oct. 2003 à 21:32
Bonjour!

J'ai commencé le C++ il y a un moment et j'ai un problème qui n'est pas des moindres.
Quand je lance le programme que j'ai écrit et compilé auparavant, il se lance et puis en une fraction de seconde il se referme!

Par ex: J'ai fais un petit programme qui convertit les degrés F en C°

J'entre les degrés C° puis j'appuie sur enter mais un milliardième de seconde après il montre le résiultat et se refèrme aussi tot! (donc c'est impssible de voir le résultat).

Est-ce que quelqu'un a une solution à mon problème?

Merci d'avance :-)
A voir également:

5 réponses

Logique parce que tu affiches ta conversion puis la tache exécutée le programme se ferme. Si tu ne souhaite pas que l'application se ferme tout de suite tu peux faire une pause en fin de programme avec la fonction d'exécution système: system("pause"); ou bien tu lance ton application depuis la console qui restera toujours en exécution donc le résultat sera toujours visible. Voilà tout!
0
LordPierre Messages postés 9 Date d'inscription mardi 14 octobre 2003 Statut Membre Dernière intervention 18 octobre 2003
15 oct. 2003 à 14:46
Bonjour!

Merci, mais si je veux passer le programme à quelqu'un je peux pas lui dier "tu appuie sur enter et directement sur pause. :-/
Alors je sais pas vous connaisez pas un autre moyen qui est peut-être plus simple dans le résultat.

Merci
0
Que trouves-tu de si compliqué? Ce sont des méthode assez basiques pour un programmeur qui se respecte. Peut être ai-je pas été assez explicite?

Exemple:

// Mon programme simulant l'affichage de la conversion ° C en ° F

#include <iostream>
#include <cstdlib>

int main(int argc, char *argv[])
{
int f;
f = 95; // température fictive
std::cout << "Temperature (F):" << f << endl; //affichage
std::system("pause"); // pause

/* une pause est effectuée avant la fin du programme
qui se terminera uniquement apres l'appuie d'une touche */

return EXIT_SUCCESS; // donne 0 à la fonction main si tout est OK
}

C'est pas encore compris?
0
LordPierre Messages postés 9 Date d'inscription mardi 14 octobre 2003 Statut Membre Dernière intervention 18 octobre 2003
16 oct. 2003 à 10:48
Ah Merci! J'avais mal compris le précedent message! :-) Merci. (Je ne suis pas encore très avancé en programmation :-(

Encore Merci

LordPierre
0
LordPierre Messages postés 9 Date d'inscription mardi 14 octobre 2003 Statut Membre Dernière intervention 18 octobre 2003
16 oct. 2003 à 11:12
Ah Merci! J'avais mal compris le précedent message! :-) avec "pause" (Je ne suis pas encore très avancé en programmation :-(

Encore Merci

Mais j'ai essayé d'integrer

std::system("pause");
et
return EXIT_SUCCESS;

Dans ce programme Qui converti les CHF en SEK.

#include <iostream>
int main()
{
int chf, sek;
std::cout <<
"\nEntrez la somme ne SEK: ";
std::cin >> sek;
chf = (sek*0.16); /* ce nest pas les vrai valeurs*/
std::cout << "La valeur en CHF est de ";
std::cout << chf;
std::system("pause")
return EXIT_SUCCESS;
}

Mais quand j'appuie sur enter sa execute les deux commmandes: avoir la somme et mets la valeur zéro à main.


Est-il possible de faire que je doit appuyer une fois sur enter pour afficher la valeur et une autre fois sur une autre touche ou la même pour fermer?

Merci d'avance! :-)

LordPierre
0
L'exécution du programme est séquentielle c'est à dire chaque instruction est exécuté chronologiquement du début du bloc "{" jusqu'à la fin du bloc "}" de la fonction main donc si tu souhaites une pause apres une instruction tu peux écrire std::system("pause"); apres l'instruction dont tu veux observer les effets. Pour préciser un peu plus la fonction std::system("application"); et la macro substitution EXIT_SUCCESS qui est remplacée par 0 pendant la compilation sont définies dans l'en-tête (header) <cstdlib>. Pour les en-têtes de la bibliothèque standard du C++ la norme dit qu'il ne faut pas écrire <cstdlb.h> mais <cstdlib> car ces 2 écritures correspondent à 2 fichiers différents par leurs noms mais dont le contenu est strictement identique cependant beaucoup de compilateurs acceptent le <cstdlib.h> car <cstdlib> contient "#include <cstdlib.h>". Pourquoi ne commences-tu pas par le C au lieu d'attaquer directement le C++? Le C++ contient seulement des extensions du C que dans un 1er temps tu n'utiliseras pas.
0
LordPierre Messages postés 9 Date d'inscription mardi 14 octobre 2003 Statut Membre Dernière intervention 18 octobre 2003
16 oct. 2003 à 20:33
J'ai commencé le C++ car c'est celui qui était le plus "normal" a mes yeux, car j'ai cherché sur des sites mais on en peut pas bien s'informer.

Mais il y a des grandes differences entre le C et le C++?
Et comment fait on pour faire des programmes dans des fenêtres Windows? Jusque la j'ai seulement réeussi à les executer dans DOS.

J'ai trouvé des codes pour avoir des fenêtres sur mon compilateur ("Des C++") mais je sais pas comment faire pour mettre un programme à l'interieur.

Le code est:

#include <windows.h>

/* Declare Windows procedure */
LRESULT CALLBACK WindowProcedure(HWND, UINT, WPARAM, LPARAM);
/* Make the class name into a global variable */
char szClassName[ ] = "WindowsApp";
int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nFunsterStil)

{
HWND hwnd; /* This is the handle for our window */
MSG messages; /* Here messages to the application are saved */
WNDCLASSEX wincl; /* Data structure for the windowclass */

/* The Window structure */
wincl.hInstance = hThisInstance;
wincl.lpszClassName = szClassName;
wincl.lpfnWndProc = WindowProcedure; /* This function is called by windows */
wincl.style = CS_DBLCLKS; /* Catch double-clicks */
wincl.cbSize = sizeof(WNDCLASSEX);

/* Use default icon and mouse-pointer */
wincl.hIcon = LoadIcon(NULL, IDI_APPLICATION);
wincl.hIconSm = LoadIcon(NULL, IDI_APPLICATION);
wincl.hCursor = LoadCursor(NULL, IDC_ARROW);
wincl.lpszMenuName = NULL; /* No menu */
wincl.cbClsExtra = 0; /* No extra bytes after the window class */
wincl.cbWndExtra = 0; /* structure or the window instance */
/* Use light-gray as the background of the window */
wincl.hbrBackground = (HBRUSH) GetStockObject(LTGRAY_BRUSH);

/* Register the window class, if fail quit the program */
if(!RegisterClassEx(&wincl)) return 0;

/* The class is registered, let's create the program*/
hwnd = CreateWindowEx(
0, /* Extended possibilites for variation */
szClassName, /* Classname */
"Windows App", /* Title Text */
WS_OVERLAPPEDWINDOW, /* default window */
CW_USEDEFAULT, /* Windows decides the position */
CW_USEDEFAULT, /* where the window ends up on the screen */
544, /* The programs width */
375, /* and height in pixels */
HWND_DESKTOP, /* The window is a child-window to desktop */
NULL, /* No menu */
hThisInstance, /* Program Instance handler */
NULL /* No Window Creation data */
);

/* Make the window visible on the screen */
ShowWindow(hwnd, nFunsterStil);
/* Run the message loop. It will run until GetMessage( ) returns 0 */
while(GetMessage(&messages, NULL, 0, 0))
{
/* Translate virtual-key messages into character messages */
TranslateMessage(&messages);
/* Send message to WindowProcedure */
DispatchMessage(&messages);
}

/* The program return-value is 0 - The value that PostQuitMessage( ) gave */
return messages.wParam;
}

/* This function is called by the Windows function DispatchMessage( ) */
LRESULT CALLBACK WindowProcedure(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message) /* handle the messages */
{
case WM_DESTROY:
PostQuitMessage(0); /* send a WM_QUIT to the message queue */
break;
default: /* for messages that we don't deal with */
return DefWindowProc(hwnd, message, wParam, lParam);
}
return 0;
}

Ou dois-je mettre mon programme pour qu'il soit dans la fenêtre Windows et pas en DOS???

Merci d'avance! :-)
>-=LordPierre=-<
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tu veux mettre la charrue avant les boeufs à mon avis. Je sais pas si tu veux en mettre plein la vue ou seulement t'extasier devant une fenêtre mais si ton programme ne fait rien de miraculeux personne n'en voudra ni même toi :-D . Tu as commencé par marcher debout avant de marcher à 4 pattes? Il faut savoir rester modeste au départ puis gravir les marches car c'est la patience qui prime en programmation. Celui qui veut développer en un éclair il fait du Visual Basic tout simplement et il a de quoi faire mumuze avec des textboxs, labels et autres objets. En revanche avec du Visual Basic on est tres vite limité pour écrire un algorithme complexe. A toi de voir ce que tu souhaite faire, un truc clinquant et visuel ou quelque chose de complexe voir matheux ^_^ .
0