Sortie de programme impossible

Signaler
Messages postés
7
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2006
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
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

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

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
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>
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
Ta pas besoin de delete sans new non?

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
7
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2006

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");



}

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



@+;
satellite34

http://www.rootscommunity.com/</FON< body>
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
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
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
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>
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
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>
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
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
Messages postés
7
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2006

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);
                                }

??
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
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>
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
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
Messages postés
7
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2006

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....
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
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>
Messages postés
7
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2006

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
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
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
Messages postés
7
Date d'inscription
mercredi 7 septembre 2005
Statut
Membre
Dernière intervention
10 mai 2006

merci pour vos tentatives mais non cela ne fonctionne pas ...
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
12
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