Sortie de programme impossible

maniolar Messages postés 7 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 10 mai 2006 - 1 avril 2006 à 17:19
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 2 avril 2006 à 15:02
Bonjour à tous, celafait deux jours que je tente
deseperemment de trouver un moyen de sortir de mon prog correctement mais je n'y
arrive pas!!

j'ai l'impression d'avoir tout essayer........... Help!!

attention j'envoie la sauce



int main(void)


{

char *er = "er";

char *ir = "ir";

char *re = "re";




char input[200];


char output[200];


const char **ptrconjugaison;

int choix;


char *ptr;


char again = 0;


int i=0,j=0;



while(again!='n' && again!='N')


{


printf("\nChoisissez un verbe a conjuguer ('n' pour quitter):" );


fflush
(stdout);/* Pour afficher le message tout de suite
*/


lire(input, sizeof input);


if(!viregulier(input))


{


ptr = &input[strlen(input)-2];






if(strcmp(ptr,er)==0){


ptrconjugaison = prem_conjugaison;


printf("\n Verbe %s du Premier Groupe, Radical
: %s\n",input,ptr);


}


else if(strcmp(ptr,ir)==0){

ptrconjugaison = deux_conjugaison;

printf("\n Verbe %s du Deuxieme Groupe, Radical
: %s\n",input,ptr);}




else if(strcmp(ptr,re)==0){


ptrconjugaison = trois_conjugaison;


printf("\n Verbe %s du Troisieme Groupe,
Radical : %s\n",input,ptr);


}






input[strlen(input)-2]='\0';


strcpy(output,input);




while(choix != 18)

{

printf("\n");






printf("
-1- Present\n");




printf(" -18- Quitter\n");



printf(" Votre choix: ");


scanf("%d",
&choix);

switch(choix)

{

case 1 :



printf("\nPresent :\n");




for(j=0;j

19 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
1 avril 2006 à 18:54
Pour quitter proprement, il doit y avoir un return 0 à la fin de la fonction main.

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
1 avril 2006 à 20:30
a premiere vue , des pointeurs et aucun delete, ca me parait louche;

memory leaks a foisn a prévoir....


@+;
satellite34

http://www.rootscommunity.com/</FON< body>
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
1 avril 2006 à 20:46
Ta pas besoin de delete sans new non?

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
maniolar Messages postés 7 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 10 mai 2006
1 avril 2006 à 20:47
Bon je suis débutant, cela fait une semaine que je buche sur ce programme de conjugaison

Tu pourrais m'en dire plus sur les deletes svp, il s'agit de libérer de la mémoire?

J'ai essayé également de faire differentes conditions et là c'est
la cata...à partir de 3 'else if' ca ne fonctionne plus

Désolé si le code parait barbare Aidez -moi please!



while(again!='n' && again!='N')


{

printf("\nChoisissez un verbe a conjuguer ('n' pour quitter):" );

fflush
(stdout);/* Pour afficher le message tout de suite
*/


lire(input, sizeof input);

if(!viregulier(input))

{




ptr = &input[strlen(input)-2];

ptrtir = &input[strlen(input)-3];


ptraitre = &input[strlen(input)-5];


ptrdre = &input[strlen(input)-3];


ptrcevoir = &input[strlen(input)-6];


printf("=====================================================\n");





if(strcmp(ptr,er)==0){


ptrconjugaison = prem_conjugaison;


printf("\n Verbe %s du Premier Groupe, Radical
: %s\n",input,ptr);


}

else
if((strcmp(ptr,ir)==0) && (strcmp(ptrcevoir,cevoir)!=0)
&& (strcmp(ptrtir,tir)!=0)){


ptrconjugaison = deux_conjugaison;


printf("\n Verbe %s du Deuxieme Groupe, Radical
: %s\n",input,ptr);


}


else if((strcmp(ptr,re)==0) &&
(strcmp(ptraitre,aitre)!=0) && (strcmp(ptrdre,dre)!=0)){


ptrconjugaison =
trois_conjugaison;



printf("\n Verbe %s du Troisieme Groupe,
Radical : %s\n",input,ptr);


}


else if((strcmp(ptrcevoir,cevoir)==0) && (strcmp(ptr,ir)!=0)
&& (strcmp(ptrtir,tir)!=0)){


ptrconjugaison =
trois_conjugaisoncevoir;


printf("\n Verbe %s du Troisieme Groupe,
Radical : %s\n",input,oir);


}


else if((strcmp(ptrtir,tir)==0) &&
(strcmp(ptrcevoir,cevoir)!=0) && (strcmp(ptr,ir)!=0)){


ptrconjugaison =
trois_conjugaisontir;



printf("\n Verbe %s du Troisieme Groupe,
Radical : %s\n",input,ptrtir);


}



/else if((strcmp(ptrdre,dre)==0) && (strcmp(ptraitre,aitre)!=0)
&& (strcmp(ptr,re)!=0)){


ptrconjugaison =
trois_conjugaisondre;



printf("\n Verbe %s du Troisieme Groupe,
Radical : %s\n",input,ptrdre);


}


else if((strcmp(ptraitre,aitre)==0) && ((strcmp(ptrdre,dre)!=0)
&& (strcmp(ptr,re)!=0)){

ptrconjugaison = trois_conjugaisonaitre;


printf("\n Verbe %s du Troisieme Groupe,
Radical : %s\n",input,ptraitre);


}





else{


printf("erreur
\n");



}

0

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

Posez votre question
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
1 avril 2006 à 20:53
logiquement aucun besoin de delete si pas de new, lecture trop rapide, autant pour moi....



@+;
satellite34

http://www.rootscommunity.com/</FON< body>
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
1 avril 2006 à 21:04
Bon si ça ne fonctionne plus après 3 else if, c'est surement une erreure toute simple mais je la vois pas du tout (dsl mais j'ai pas le temps d'analyser ton code pour l'intant). Bon petite remarque. Ya t-il un break quelque part dans ta boucle? Car sinon c'est sûre que tu ne pourra jamais quitter ton programme.

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
1 avril 2006 à 21:07
Je vois que tu a, dans le premier post, mit un while dans un while. Tu utilise break mais break ne va que quitter la seconde boucle et tu te retrouvera encore dans la boucle principal. Donc si tu veut tout quitter à partir de la seconde boucle, remplace ton break par un return 0 qui aura comme effet de terminer la fonction main.

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
1 avril 2006 à 21:09
trop de boucle tue la boucle, il vaut mieux travailler avec des conditions autant que possible car les boucles sont souvent gourmandes en resources, enfin c'est juste un avis...



@+;
satellite34

http://www.rootscommunity.com/</FON< body>
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
1 avril 2006 à 21:09
trop de boucle tue la boucle, il vaut mieux travailler avec des conditions autant que possible car les boucles sont souvent gourmandes en resources, enfin c'est juste un avis...



@+;
satellite34

http://www.rootscommunity.com/</FON< body>
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
1 avril 2006 à 21:14
Ben pas tellement car la seconde boucle est dans la première donc quand elle sera executer, la boucle maitresse ne continura pas à moin de faire du multithread. En plus, en utilisant scanf, il se trouve à stopper les opérations donc consomation processeur quasi nul.

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
maniolar Messages postés 7 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 10 mai 2006
1 avril 2006 à 21:15
je vais essayer de mettre un "break" et un "return 0" à la fin du prog.
pour les "else if" je pense que c'est dû au fait que je fait un peu du "jonglage" avec plusieurs pointeurs et mon "input" mais je ne vois pas comment faire autrement, en tout cas merci
 ptr = &amp;input[strlen(input)-2];
            ptrtir = &amp;input[strlen(input)-3];
            ptraitre = &amp;input[strlen(input)-5];
            ptrdre = &amp;input[strlen(input)-3];
             ptrcevoir = &amp;input[strlen(input)-6];


Donc cela ne dérange pas de faire
else if((strcmp(ptr,ir)==0) &amp;&amp; (strcmp(ptrcevoir,cevoir)!=0) &amp;&amp; (strcmp(ptrtir,tir)!=0)){        
                 ptrconjugaison = deux_conjugaison;
                                printf("\n     Verbe %s du Deuxieme Groupe, Radical : %s\n",input,ptr);
                                }

??
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
1 avril 2006 à 21:16
bien sur pas ds le cas présent , encore que j'en sait rien !!, mais bon, vu la question, ca doit débuter en c++, donc c plus une facon de penser qu'une directive pour ce code précis

aiai, faut tout dire ici! lol



@+;
satellite34

http://www.rootscommunity.com/</FON< body>
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
1 avril 2006 à 21:26
Regarde. Dans cette section

case 18 :
printf("Au revoir !\n\n");
break;
default:
printf("Choix incorrect\n");
break;

Je suppose que printf("Au revoir!\n\n") signifie la fin du programme non? Donc remplace le break par un return 0

case 18 :
printf("Au revoir !\n\n");
return 0;
default:
printf("Choix incorrect\n");
break;

Pour tes problèmes de else if, peut pas t'aider pour l'intans dsl.

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
maniolar Messages postés 7 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 10 mai 2006
1 avril 2006 à 21:45
En fait si je mets un return 0 je sort completement du programme. et
j'ai remarqué qu' en le mettant à la fin du prog cela me fait le meme
resultat

Ce que je cherche c'est à revenir dans ma premiere boucle et pouvoir en sortir en appuyant sur 'n'

Si vous avez des idées....
0
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
1 avril 2006 à 21:51
char var;
scanf("%c", &var);

switch( var )
{
case 'n' :
break;

default:
continue; // bypass switch
}
break;

essaye voir ca


@+;
satellite34

http://www.rootscommunity.com/</FON< body>
0
maniolar Messages postés 7 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 10 mai 2006
1 avril 2006 à 22:05
ca marche pas...

ce qui est saisie est une chaine de caractere...et je vois pas comment incorporer ce switch dans mon prog

j'ai test switch (input) mais c'est pas possible
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
1 avril 2006 à 23:15
Tu ne veut que tester un seul caratère? Et bien normalement si ton caractère se situe dans input tu pourrais faire switch(input[0]). J'ai jamais essayer cependant.

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
maniolar Messages postés 7 Date d'inscription mercredi 7 septembre 2005 Statut Membre Dernière intervention 10 mai 2006
2 avril 2006 à 11:34
merci pour vos tentatives mais non cela ne fonctionne pas ...
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
2 avril 2006 à 15:02
char c;
c = input[0]; //C'est la que logiquement devrais ce trouver ton caractère

switch(c)
{
...
case 'n'
return 0;
...
}

___________________________________________
Les plus grands esprits trouvent toujours une solution
0
Rejoignez-nous