Pb debutant [Résolu]

Signaler
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012
-
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012
-
//voila j'ai un pb dans mon prog de gestion (je debute)
//la main:
int main()
{
int gdr, gmode;
gdr=DETECT;
initgraph(&gdr,&gmode,"..\\bgi");
//
machine pc(0, "");
printf("ret=%d\n", menu_nouv_machine(pc));
printf("panne:%s\n", pc.defpanne);
getch();
//
closegraph();
return 0;
}
//le menu nouv machine:
int menu_nouv_machine(machine pc)
{
bouton ok(580,454,"Ok");
bouton annuler(60, 454, "Annuler");
edit_texte nom(320, 26, "nom");
edit_texte idcli(320, 68, "id");
nom.set_edit_texte(nom.p_x, nom.p_y, 620, nom.texte, nom.col, nom.actif);
idcli.set_edit_texte(idcli.p_x, idcli.p_y, 200, idcli.texte, idcli.col, idcli.actif);
ok.set_bouton(ok.p_x, ok.p_y, ok.largeur, ok.texte, ok.col, true);


int tch;
while(tch!=CLAV_ENTREE)
{
suite:
cleardevice();
annuler.aff_bouton();
ok.aff_bouton();
nom.aff_edit_texte();
idcli.aff_edit_texte();
tch=touche();
switch(tch)
{
case CLAV_HAUT:
if(ok.actif){nom.actif=1; ok.actif=0;goto suite;}
if(nom.actif){idcli.actif=1; nom.actif=0;goto suite;}
if(idcli.actif){annuler.actif=1; idcli.actif=0;goto suite;}
if(annuler.actif){ok.actif=1; annuler.actif=0;}
break;
case CLAV_BAS:
if(ok.actif){annuler.actif=1; ok.actif=0;goto suite;}
if(annuler.actif){idcli.actif=1; annuler.actif=0;goto suite;}
if(idcli.actif){nom.actif=1; idcli.actif=0;goto suite;}
if(nom.actif){ok.actif=1; nom.actif=0;}
break;
case CLAV_ENTREE:
if(nom.actif){nom.edit_edit_texte(); tch=0;}
if(idcli.actif){idcli.edit_edit_texte(); tch=0;}
};
}
strcpy(pc.defpanne, nom.texte);
if(ok.actif)return 1;
if(annuler.actif)return 2;
return 0;
}
//enfin edit edit texte:
edit_texte::edit_edit_texte()
{
editmode=true;
int tch=0;
while(tch!=CLAV_ENTREE)
{
if(tch==CLAV_BACKS && strlen(texte))texte[strlen(texte)-1]='\0';
else
{
if(p_x-largeur/2+5+textwidth(texte) < p_x+largeur/2-10)
{
texte[strlen(texte)]=char(tch);
texte[strlen(texte)+1]='\0';
}
}
aff_edit_texte();
tch=getch();
}
editmode=false;
}
//malheuresement la variable pc.defpanne n'est pas modifiée
//elle retourne "nb" la valeur donnée dans le constructeur...
//soyer sympas (Je débute) ;-)
//Merci
//LA_Tupac

Everything is possible...so...nothing, forget

2 réponses

Messages postés
78
Date d'inscription
lundi 14 avril 2003
Statut
Membre
Dernière intervention
23 avril 2010

Le fait est que quand tu appelles ta fonction menu_nouv_machine avec
comme parametre "pc", le programme créé une copie de cette variable qui
sera utilisée pour la fonction et qui sera détruite à la fin de ta
fonction ! Pas très intéressant dans ton cas tu me diras donc tu as 2
solutions :

Soit tu programmes en C++ et là tu modifies ta fonction
menu_nouv_machinepour qu'elle prenne en paramètre un a (machine
&pc) et c'est tout. Comme ça ta variable sera pasé par référence et
ca sera fini tout marchera.

Soit tu programmes en en C simple, dans ce cas tu as 2 solutions
possibles, tu t'arranges pour que ta fonction retourne ta structure
modifiée mais je crois pas que ca t'irait rste donc la derniere
solution : tu modifies le parametre de ta fonction menu_nouv_machine
pour qu'elle prenne en paramètre une machine *pc, ensuite dès que tu
voies un pc.quelque chose tu le remplaces par pc->quelque chose car
maintenant pc est un pointeur. De plus quand tu appelles
menu_nouv_machine(pc) par exemple remplace ça par
menu_nouv_machine(&pc); Sauf si bien sur pc est un pointeur à sa
declaration et dans ce cas tu ne modifies pas l'appel de cette fonction.

Voilà j'espère avoir été clair. Sur ce bonne prog !

Mess with the best, die like the rest
Messages postés
305
Date d'inscription
jeudi 29 avril 2004
Statut
Membre
Dernière intervention
18 janvier 2012

ok, ça me semblai louche de noter les class comme des struct !
Remerki!

Everything is possible...so...nothing, forget