Faire un blindage sous Monia PL

Résolu/Fermé
valogic13 Messages postés 91 Date d'inscription vendredi 7 décembre 2012 Statut Membre Dernière intervention 21 mai 2015 - 19 sept. 2014 à 19:39
valogic13 Messages postés 91 Date d'inscription vendredi 7 décembre 2012 Statut Membre Dernière intervention 21 mai 2015 - 21 sept. 2014 à 15:45
Bonjour,

J'utilise actuellement Monia PL pour programmer des algo mais il y a un truc que je n'arrive pas à faire : LE BLINDAGE.

Je m'explique :

Mon algo est le suivant :


POUR indicePionsUtilisateur <- 1 JUSQU'A 5 FAIRE
Afficher(" ");
Saisir(pionsUtilisateur[indicePionsUtilisateur]);
Curseur(5*indicePionsUtilisateur,(CurseurY()-1));
CouleurFond(pionsUtilisateur[indicePionsUtilisateur]);
Afficher(" ",pionsUtilisateur[indicePionsUtilisateur]," ");
CouleurFond(0);
Afficher(" ");
FINP

Dans cet algo je demande à l'utilisateur de saisir un entier. Le problème est que si jamais l'utilisateur saisie une chaîne de caractère le programme plante.
J'aimerai faire en sorte que lorsque l'utilisateur saisie autre chose qu'un entier je puisse lui dire qu'il fait une erreur et ensuite lui redemander de saisir a nouveau.

J'espère avoir était assez "claire" ^^

Merci d'avance !


A voir également:

5 réponses

Utilisateur anonyme
19 sept. 2014 à 19:58
Bonsoir, je ne connais pas ce langage mais de façon générale tu as deux principes.

-Utiliser la gestion d'erreur: si une exception est générée et que son numéro correspond à une valeur incorrecte saisie alors je redemande.
C'est à utiliser en dernier ressort en général ça utilise beaucoup de ressources.

-Faire un test avant conversion: si l'utilisateur fait une saisie au clavier, alors la premiere donnée que tu reçois est soit un caractère soit une chaine de caractères.
A ce moment là beaucoup de langage propose une ou des méthode pour tester si une chaine représente un nombre (IsNumeric) ou un outil qui tester la conversion et ne retourne le résultat que si elle est possible (TryCast), reste à trouver un équivalent dans ton langage.
1
valogic13 Messages postés 91 Date d'inscription vendredi 7 décembre 2012 Statut Membre Dernière intervention 21 mai 2015 11
19 sept. 2014 à 20:11
D'accord, merci pour cette réponse rapide, je vais essayer de trouver l'équivalent dans mon langage .
0
valogic13 Messages postés 91 Date d'inscription vendredi 7 décembre 2012 Statut Membre Dernière intervention 21 mai 2015 11
19 sept. 2014 à 20:55
Non je n'y arrive pas, j'ai passé la journée dessus je pense qu'il faut que je me pause un peu parce que j'arrive plus à être lucide..
Il doit y avoir moyen de faire quelque chose avec les boucle TANT QUE et SI et la fonction ChaineVersEntier mais je sais pas comment faire :/
0
Utilisateur anonyme
19 sept. 2014 à 21:20
Il n'y a quasiment aucune littérature sur le net au sujet de Monia...

J'ai trouvé ceci
Que se passe-t-il lorsque l'utilisateur tape autre chose qu'une valeur entière ? Comment s'affranchir de ce type d'erreur ?
En n'effectuant que des saisies sous forme de chaînes de caractères, et en assurant soi-même les conversions nécessaires et le traitement des erreurs...
var s est une chaine ;
......
Saisir( s ) ;
n <- Plancher( ChaineVersNombre( s, 0 ) ) ;


ici

Comme la fonction ChaineVersNombre n'est pas expliquée, je ne fais qu'une supposition:
Retourne le nombre décrit par s, et si s n'est pas un nombre, retourne le second argument, soit 0.

Si mon hypothèse est juste, tu étais bien sur la bonne voie.

Tu peux associer un Tant Que du genre:
Tant Que (n == 0) RedemandeUneSaisie

0

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

Posez votre question
valogic13 Messages postés 91 Date d'inscription vendredi 7 décembre 2012 Statut Membre Dernière intervention 21 mai 2015 11
21 sept. 2014 à 15:45
Merci pour ta réponse je viens enfin de réussir !
Voilà ce que j'ai fait :

POUR indicePionsUtilisateur <- 1 JUSQU'A 5 FAIRE
Afficher(" ");
pionsUtilisateur[indicePionsUtilisateur] <- 0 ;
TANT QUE (pionsUtilisateur[indicePionsUtilisateur] = 0 ) FAIRE
Saisir(test_si_saisie_correct);
pionsUtilisateur[indicePionsUtilisateur] <- Plancher( ChaineVersNombre( test_si_saisie_correct, 0 ) ) ;
Curseur(5*indicePionsUtilisateur,(CurseurY()-1));
FINTQ
CouleurFond(pionsUtilisateur[indicePionsUtilisateur]);
Afficher(" ",pionsUtilisateur[indicePionsUtilisateur]," ");
CouleurFond(0);
Afficher(" ");
FINP
0