devine():={
A:=rand(10);
label (saisie);
saisir("essai",b);
if(b>A){afficher("trop grand");goto (saisie);}
else {
if(b<A){afficher("trop petit");goto (saisie);}
else afficher("gagné");}
}
Lorsque je lance le programme ci-dessus, il se bloque sur "calcul en cours", il y a un blocage avec l'exécution du goto dans les blocs "if".
Quelle est la solution?
problème avec goto
Re: problème avec goto
goto et label ne marchent que dans un même bloc (délimité par { }), donc le goto doit etre une seule instruction apres if ce qui nécessite ici de répéter le if. Notez aussi que else est inutile.
devine():={
A:=rand(10);
label saisie;
saisir("essai",b);
if(b>A) afficher("trop grand");
if(b<A) afficher("trop petit");
if (b!=A) goto (saisie);
afficher("gagné");
}
goto n'a pratiquement pas été testé, il est très souvent préférable d'utiliser une boucle, quitte à faire une boucle infinie et utiliser continue pour passer à l'itération suivante ou/et break pour arreter la boucle
...
while(true){
saisir("essai",b);
if(b>A) afficher("trop grand");
if(b<A) afficher("trop petit");
if (b==A) break;
}
afficher("gagné");
devine():={
A:=rand(10);
label saisie;
saisir("essai",b);
if(b>A) afficher("trop grand");
if(b<A) afficher("trop petit");
if (b!=A) goto (saisie);
afficher("gagné");
}
goto n'a pratiquement pas été testé, il est très souvent préférable d'utiliser une boucle, quitte à faire une boucle infinie et utiliser continue pour passer à l'itération suivante ou/et break pour arreter la boucle
...
while(true){
saisir("essai",b);
if(b>A) afficher("trop grand");
if(b<A) afficher("trop petit");
if (b==A) break;
}
afficher("gagné");
Re: problème avec goto
Un grand merci pour l'information, d'autant plus que je ne l'ai trouvée dans aucune aide.