Rockleader a écrit:Ton test en lui même ne marche pas si l'utilisateur n'entre pas un nombre.
Tu peux caster ton entré, je ne connais pas ADA mais tu pourrais par exemple avoir :
http://fr.wikibooks.org/wiki/Programmation_Ada/FAQ/Le_Langage_Ada#Comment_transformer_une_cha.C3.AEne_de_caract.C3.A8res_en_entier_.3F
- Code: Tout sélectionner
var a;
var b;
do {
a = lireEntree();
constant Integer := Integer'Value (a); // => trouvé sur le wikibooks
Si b 11 :
AfficherMessage("Valeur incorrect, veuillez choisir un nombre entre 0 et 11");
} while (a 11);
Ici en castant ton entré, si par exemple a est une chaine de caractère le résultat 0 par exemple.
Je te donne également ce lien pour tester la chaine en entrée, avec un peu de recherche, tu trouveras ce que tu veux.
https://docs.google.com/viewer?a=v&q=cache:a6ifEl0TrmMJ:deptinfo.cnam.fr/Enseignement/CycleProbatoire/Vari/chapitres-pdf/chapitre-8.pdf+&hl=fr&gl=fr&pid=bl&srcid=ADGEEShSnjCpA4by9AyviKJlYnbMLeFJkXJ3rXumNFipmQSCcYfYo6CJljApLsYo5mGBTMfLKCa4wE_i_FpTlEx9wUGTngN_Bo8iznu7gv8FNTAuweHYKCpXslb08bh5u7JnvnJsU-of&sig=AHIEtbTtxY4FPLUNSxgafZ615_Pu6iuogA
Tester le programme pour des cas que le programme ne doit pas satisfaire, c'est ballo. Attention de pas tout confondre. Si on veut que ton programme gère les erreurs, alors tu gères les erreurs, si tu le veux pas, tu t'embêtes pas!!!!!
Je suis désolé, mais je ne suis absolument pas d'accord. Pourquoi les fonctions que tu utilises de bibliothèques fonctionnent ? Tout simplement parce qu'elles sont blindées, tu t'imagines qu'un utilisateur lambda va lire tout un README avec tout ce qu'il ne faut pas faire ?
Veuillez ne pas rentrer de nombre supérieur à 11 car sinon le programme crash. Attention la chaîne de caractère ne dois pas contenir plus de 100 caractères sinon ça crash.
Faut se poser 5 min et se dire ce que l'on souhaite faire, surtout pendant les études. Il est important dès le départ de connaître et pratiquer un minimum de sécurité dans un code pour au moins éviter qu'il plante !
Pendant ma scolarité, mes professeurs vérifiaient la solidité d'un code, le programme plantait/crashait => 0 et c'est complètement normal.
Prenons l'exemple d'un jeu vidéo, celui qui n'a jamais voulu essayer de passer à travers un mur invisible ou non me jette la première pierre !
Pourtant dans la vie, tu n'essayes pas de traverser les murs (ou alors faut en parler à quelqu'un :ptdr:). Pourquoi les développeurs se casseraient-ils la tête à gérer les collisions ? Parce que c'est nécessaire. N'as-tu jamais ralé lorsque tu étais parvenu à passer de l'autre côté du mur mais plus moyen de revenir sans faire un quit/reboot du jeu ? N'as-tu pas pesté sur la mauvaise gestion des collisions sur certains jeux ?
Il faut savoir ne pas non plus rentrer dans la paranoia à tester toutes les variables pour être "sur".
Il faut simplement vérifier que ce qui est en entrée est possible. Tu peux très bien pour commencer partir du principe que l'utilisateur rentrera un entier (et non une chaîne de caractère) et tester cet entier pour être sûr qu'il soit dans les bornes attendues.
Lorsque tu ouvres un fichier, tu verifies qu'il soit bien ouvert, qu'il soit présent.
Lorsque tu alloues de la mémoire, tu vérifies qu'il y a de la place disponible sinon tu renvoies un message.
Lorsque tu utilises une fonction tu vérifies que ce qui est renvoyé n'est pas une erreur (-1, NULL il faut voir la doc pour ça).
ce type de comportemenet amène souvent à des usines a gaz.
Sécurisé un minimum son code (même pour des projets persos) pour éviter les crash et les erreurs est déjà un bon début.
Je pars du principe que si en entrée on attend un nombre entre [0; 11], que je tape 12 et que ça crash, c'est que le code n'est pas complet.
Pour finir, chacun à son point de vue mais je persiste à dire que pendant l'étude, il est très important de bien vérifier que son programme ne crash pas, cela permet de prendre les bonnes habitudes.
Libre à toi après de faire ce que tu veux. Un programme qui crash sur une simple erreur de saisie (du même type attendu) est d'après moi un programme qui ne vaut même pas la peine d'être utilisée.
