Application

[Résolu]
Signaler
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009
-
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009
-
Bonjour, je suis nul et j'ai presque jamais fait de C/C++.

Enfin, si quelque truc sous dos.



Mais j'aimerais créé une aplication mais pas sous dos.

Alors j'ai Dev C++ qui m'a generer un code



#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 Windows's default color as the background of the window */

wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;



/* Register the window class, and if it fails 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;

}



Eh voilà mais je ne sais pas du tout ou mettre le code par exemple "Bonjour" mais je ne sais pas ou il faut mettre le "printf" !



SVP aidez moi et merci a tous



A++

15 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Par exemple c contient la lettre entrée par l'utilisateur, et on la cherche dans mot:



char c;

char mot[20];

//...

if(strchr(mot, c)) puts("trouvé");

else puts("pas trouvé");
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
En rouge: tu essaie de copier un simple caractère dans une chaine, alors que strcpy attend deux chaines



En foncé: lettre2, lettre3... sont des chaines, donc on utilise %s et pas %c



Est-ce que tu es sur que c'est un bon moyen de progresser ce que tu
fais la? Je pense qu'il te manque quand même un certain nombre de base,
on dirait que tu confonds les char et les char*, c'est une des choses
les plus importantes en C et il faut bien maitriser ca.Quand tu fais
strcpy(lettre2, lettre_entre) il faut bien que tu comprennes que ca n'a
aucun sens, qu'est ce que tu veux faire exactement dans cette ligne?
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Pas de printf dans ce type d'applications, que des fonction Windows!
C'est dans WindowProcedure que tu pourras afficher un message, avec
TextOut par exemple, mais je ne peux pas tout t'expliquer la c'est
quand même assez long.

Pour commencer, tu peux lire ca:

http://brunews.free.fr/brunews/download/CP5.zip

http://brunews.free.fr/brunews/download/CP5Sources.zip
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009

Salut, et merci a toi mais le prob, j'ai 13 ans et je ne comprend pas bien l'anglais donc ..

Mais bon, c'est pas grave je vais essayer de faire des truc sous dos encore un peu mais la, j'ai un prob !



Voici mon code (application DOS)

/********************************************************************/

// Auteur : Kapp Arnaud

// Date : Jeudi 21 Avril 2005 22:47

// Projet : Jeu du pendu



/********************************************************************/

#define T_VAR 30

#include <stdio.h>

#include <string.h>

#include <ctype.h>

#include <stdlib.h>



main()

{



/* Initialisation du mot juste et de quelque variable */



/* Les variables */

char mot [T_VAR+1] ;

int i ;

char choix [T_VAR+1];

char p_lettre ;

char d_lettre ;

int nb_lettre_c ;

char aff_nb_lettre_c [T_VAR+1] ;



/* Definitions des variables */

mot = 'bonjour' ;

p_lettre = 'b' ;

d_lettre = 'r' ;

for (i 0 ; i < strlen(mot) ; i i + 1)

nb_lettre_c = i - 2 ;



/* Debut du programme */



printf("Bonjour, bienvenue sur le jeu du pendu \n") ;

printf("Si vous voulez jouer, taper "play" si vous desirez quitter l'application, taper "quit" :") ;

scanf("%s", choix) ;



/* Test du choix */

if(choix == 'quit')

{

system("PAUSE");

return EXIT_SUCCESS;

}

else

{

/* Le programme commence ici */



printf("Le mot a chercher contien %d lettre : %c",nb_lettre, p_lettre) ;



/* Test assez long sur le nombre de lettre cacher */

if(nb_lettre_c 1) aff_nb_lettre_c '*' ;

if(nb_lettre_c 2) aff_nb_lettre_c '**' ;

if(nb_lettre_c 3) aff_nb_lettre_c '***' ;

if(nb_lettre_c 4) aff_nb_lettre_c '****' ;

if(nb_lettre_c 5) aff_nb_lettre_c '*****' ;

if(nb_lettre_c 6) aff_nb_lettre_c '******' ;

if(nb_lettre_c 7) aff_nb_lettre_c '*******' ;

if(nb_lettre_c 8) aff_nb_lettre_c '********' ;

if(nb_lettre_c 9) aff_nb_lettre_c '*********' ;

if(nb_lettre_c 10) aff_nb_lettre_c '**********' ;

if(nb_lettre_c 11) aff_nb_lettre_c '***********' ;

if(nb_lettre_c 12) aff_nb_lettre_c '************' ;

if(nb_lettre_c 13) aff_nb_lettre_c '*************' ;

if(nb_lettre_c 14) aff_nb_lettre_c '**************' ;

if(nb_lettre_c 15) aff_nb_lettre_c '***************' ;



/* Affichage des lettres caches */

printf("%c%c", aff_nb_lettre_c, d_lettre) ;



}





/* Quitter Le Programme */

system("PAUSE");

return EXIT_SUCCESS;

}



Voici le code et voici les erreurs :

1-imcompatible type in assignement of 'int' to 'char[31]



2-Warning character constant too logn for its type



3- Warning, multi-charactere charaecte constant.





Voilà, j'y conprend rien donc votre aide serait très gentille.



Merci a tous A++
Sans maitrise la puissance n'est rien
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009

Oups , je me suis tromper !!



le mail() qui est rouge doit être bleu dsl !

Sans maitrise la puissance n'est rien
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
mot = 'bonjour';

Les chaines sont en double quotes, et ta copie ne fait comme ca:

strcpy(mon, "bonjour");



idem pour les aff_nb_lettre_c = '***';...

Il faut que tu revoies le fonctionnemet des chaines (une chaine est une adresse mémoire)





for (i 0 ; i < strlen(mot) ; i i + 1)

nb_lettre_c = i - 2 ;

Je ne vois pas ce qu'est cencée faire cette boucle, ca donnera toujours nb_lettre_c = strlen(mot) - 3
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009

Ok, merci maintenant, plus d'erreur
de compile mais, des que je lance le prog et que je rentre la première
donnée : pendu_dos.exe doit fermer machin truc de windows.



Voici mon code peut être que ca pourra être utile:



/********************************************************************/

// Auteur : Kapp Arnaud

// Date : Jeudi 21 Avril 2005 22:47

// Projet : Jeu du pendu



/********************************************************************/

#define T_VAR 30

#include <stdio.h>

#include <string.h>

#include <ctype.h>

#include <stdlib.h>



main()

{



/* Initialisation du mot juste et de quelque variable */



/* Les variables */

char mot [T_VAR+1] ;

int i ;

char choix [T_VAR+1];

char p_lettre ;

char d_lettre ;

int nb_lettre_c ;

char aff_nb_lettre_c [T_VAR+1] ;



/* Definitions des variables */

strcpy(mot, "bonjour") ;

p_lettre = 'b' ;

d_lettre = 'r' ;

for (i 0 ; i < strlen(mot) ; i i + 1)

nb_lettre_c = i - 1 ;



/* Debut du programme */



printf("Bonjour, bienvenue sur le jeu du pendu \n") ;

printf("Si vous voulez jouer, taper "play" si vous desirez quitter l'application, taper "quit" :") ;

scanf("%s", choix) ;



/* Test du choix */

if(choix == "quit")

{

return EXIT_SUCCESS;

}

else

{

/* Le programme commence ici */



printf("%d",nb_lettre_c ) ;





/* Test assez long sur le nombre de lettre cacher */

if(nb_lettre_c == 1) strcpy(aff_nb_lettre_c, "*") ;

if(nb_lettre_c == 2) strcpy(aff_nb_lettre_c, "**") ;

if(nb_lettre_c == 3) strcpy(aff_nb_lettre_c, "***") ;

if(nb_lettre_c == 4) strcpy(aff_nb_lettre_c, "*****") ;

if(nb_lettre_c == 5) strcpy(aff_nb_lettre_c, "******") ;

if(nb_lettre_c == 6) strcpy(aff_nb_lettre_c, "******") ;

if(nb_lettre_c == 7) strcpy(aff_nb_lettre_c, "*******") ;

if(nb_lettre_c == 8) strcpy(aff_nb_lettre_c, "********") ;

if(nb_lettre_c == 9) strcpy(aff_nb_lettre_c, "*********") ;

if(nb_lettre_c == 10) strcpy(aff_nb_lettre_c, "**********") ;



/* Affichage des lettres caches */

printf("Le mot a chercher contient %d lettre : %s%s%s ",i, p_lettre, aff_nb_lettre_c, d_lettre) ;

}

/* Quitter Le Programme */

system("PAUSE");

return EXIT_SUCCESS;



}



Sinon, pour la boucle


for (i 0 ; i < strlen(mot) ; i i + 1)


nb_lettre_c = i - 1 ;




ca marche très bien et ca sort le resultat corect !



Sans maitrise la puissance n'est rien
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Ta boucle donne peut être un bon résultat, mais elle ne sert à rien, tu peux avoir directement le résultat



p_lettre est un char, utilise donc %c et non %s, idem pour d_lettre



if(nb_lettre_c == 1) strcpy(aff_nb_lettre_c, "*") ;

if(nb_lettre_c == 2) strcpy(aff_nb_lettre_c, "**") ;

if(nb_lettre_c == 3) strcpy(aff_nb_lettre_c, "***") ;

if(nb_lettre_c == 4) strcpy(aff_nb_lettre_c, "*****") ;

if(nb_lettre_c == 5) strcpy(aff_nb_lettre_c, "******") ;

if(nb_lettre_c == 6) strcpy(aff_nb_lettre_c, "******") ;

if(nb_lettre_c == 7) strcpy(aff_nb_lettre_c, "*******") ;

if(nb_lettre_c == 8) strcpy(aff_nb_lettre_c, "********") ;

if(nb_lettre_c == 9) strcpy(aff_nb_lettre_c, "*********") ;

if(nb_lettre_c == 10) strcpy(aff_nb_lettre_c, "**********") ;

Ce n'est pas très propre, surtout si tu peux passer de 10 à 20 par exemple. Il faut que tu fasses:



char* p = aff_nb_lettre_c;

for(int i 0; i < nb_lettre_c; i++) *p++ '*';

*p = 0;
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009

Cool, c'est bon, je n'ai plus de prob enfin ....



J'amerais savoir comment on fait pour changer la coleur de text et de fond ?

(je suis sous devC++)



Merci de ton aide



A++





Sans maitrise la puissance n'est rien
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
Avec Dev-C++ tu as des fonctions pour faire ca dans le fichier conio.c (ces fonctions utilisent des API de Windows).
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009

Et sinon, y a t'il moyen de verifier si un lettre est contenu dans un mot ?



A++
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
9
oui avec strchr. Si ca retourne 0 c'est que la lettre n'a pas été trouvée



strchr("chaine", 's') retourne 0



Sinon, la valeur de retour est un pointeur sur la position du caractère trouvé
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009

Pardon, mais je n'ai pas compris



comment pour verifier si la lettre entrer par l'utilistaeur existe dans un mot et verifier le "resultat" ?



Merci



Ps: T'inquiète pas, j'accpeterais tes reponses !



Sans maitrise la puissance n'est rien
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009

J'ai encore recontrer 2 erreurs dsl de t'embêter autant !

Voici le code :



/********************************************************************/

// Auteur : Kapp Arnaud

// Date : Jeudi 21 Avril 2005 22:47

// Projet : Jeu du pendu



/********************************************************************/

#define T_VAR 29

#include

#include

#include

#include



main()

{

/*Initialisation de toutes les variables */

char mot [T_VAR+1] ;

char nb_lettre_c [T_VAR+1] ;

char aff_nb_lettre_c [T_VAR+1] ;

char p_lettre ;

char d_lettre ;

int i ;

int nb_lettre ;

int lettre ;

char lettre_entre ;

int chance ;



/* Les lettres */

char lettre2[T_VAR+1] ;

char lettre3[T_VAR+1] ;

char lettre4[T_VAR+1] ;

char lettre5[T_VAR+1] ;

char lettre6[T_VAR+1] ;



strcpy(lettre2, "*") ;

strcpy(lettre3, "*") ;

strcpy(lettre4, "*") ;

strcpy(lettre5, "*") ;

strcpy(lettre6, "*") ;



char lettre_j2[T_VAR+1] ;

char lettre_j3[T_VAR+1] ;

char lettre_j4[T_VAR+1] ;

char lettre_j5[T_VAR+1] ;

char lettre_j6[T_VAR+1] ;



strcpy(lettre_j2, "r") ;

strcpy(lettre_j3, "b") ;

strcpy(lettre_j4, "r") ;

strcpy(lettre_j5, "*") ;

strcpy(lettre_j6, "*") ;





/* Mise des valeurs des variables */

strcpy(mot, "Arbre") ;

p_lettre = 'a' ;

d_lettre = 'e' ;

/* Calcul la longueur du mot */

for (i 0 ; i < strlen(mot) ; i i + 1)

nb_lettre = i - 1 ;

lettre = 0 ;





/* "Debut" du programme */

printf("Bonjour, bienvenue sur le jeu du pendu \n\n") ;



/* Test pour afficher le nombre de lettre cache au debut */

if(nb_lettre == 3) strcpy(aff_nb_lettre_c, "***") ;

if(nb_lettre == 4) strcpy(aff_nb_lettre_c, "****") ;

if(nb_lettre == 5) strcpy(aff_nb_lettre_c, "*****") ;





/* Fin du test, "affichage" des lettres cache */

printf("Le mot a chercher contient %d lettre : %c%s%c \n",i, p_lettre, aff_nb_lettre_c, d_lettre) ;



/* Debut de la boucle, veritable partie du prog */

while(lettre < 20)

{

lettre = lettre + 1 ;



printf("\n") ;

printf("Entrez une lettre :") ;

scanf("%c", &lettre_entre) ;

printf("Vous avez entre %c \n", lettre_entre);

if(strchr(mot, lettre_entre))

{

printf("La lettre %c existe dans le mot. \n", lettre_entre);



/* On test à quelle lettre elle corespond */



if(nb_lettre == 3)

{

if(strchr(lettre_j2, lettre_entre)) strcpy(lettre2, lettre_entre) ;

if(strchr(lettre_j3, lettre_entre)) strcpy(lettre3, lettre_entre) ;

if(strchr(lettre_j4, lettre_entre)) strcpy(lettre4, lettre_entre) ;



printf("%c%c%c%c%c \n", p_lettre, lettre2, lettre3, lettre4, d_lettre) ;





}

}



else

{

printf("La lettre %c n'existe pas dans le mot. \n", lettre_entre);

chance = chance + 1 ;

if(chance == 6) printf("Vous avez perdu, le bon mot etait %s", mot) ;



}




}







/* Quitter Le Programme */

system("PAUSE");

return EXIT_SUCCESS;



}



La première erreur : invalid conversion from char to const char



Seconde erreur : aucun message d'erreur mais les lettre "lettre2, lettre3 et lettre4" sorte n'importe quoi comme valeur ! je pige po !



A++ et merci pour ton aide !



Ps: dsl de t'embêter !
Messages postés
392
Date d'inscription
mercredi 24 novembre 2004
Statut
Membre
Dernière intervention
26 septembre 2009

Je sais pas non plus si ce que je fait est un bon moyen mais bon ...



lorsque je met %s ca foire ! le programme doit fermer ....



A la ligne strcpy(lettre2, lettre_entre) je veux passer la valeur saisi par l'utilisateur à la lettre 2 voilà !



Excuse moi de t'avoir autant embeter !





Sans maitrise la puissance n'est rien