Pb debutant

Résolu
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 - 27 févr. 2005 à 13:35
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 - 27 févr. 2005 à 16:28
//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

theneoiceman Messages postés 78 Date d'inscription lundi 14 avril 2003 Statut Membre Dernière intervention 23 avril 2010
27 févr. 2005 à 14:39
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
3
cs_LA_Tupac Messages postés 305 Date d'inscription jeudi 29 avril 2004 Statut Membre Dernière intervention 18 janvier 2012 1
27 févr. 2005 à 16:28
ok, ça me semblai louche de noter les class comme des struct !
Remerki!

Everything is possible...so...nothing, forget
0
Rejoignez-nous