2015-04-20 2 views
0

J'ai développé une application qui crée aléatoirement deux entiers et les ajoute ensuite. La somme des deux entiers doit être élaborée par un utilisateur et entrée dans TEdit. Lorsque j'utilise l'instruction if pour valider la réponse (en TEdt), j'obtiens une erreur. le code snipped:Validation de l'entrée TEdit, en la comparant avec une valeur entière

answer := int1+int2; 
UserAnswer:=StrToInt(edtAnswer.Text); 
if(UserAnswer=answer)then 
    lblRemark.Caption:= 'Correct Answer'; 

Quand exécuter l'application, je reçois un convertError une "erreur ... pas un entier valide".

+0

Il y a un certain temps depuis ma dernière programmation en Delphi, mais à partir de quelques recherches, je pense qu'il serait prudent de considérer que votre valeur de chaîne de 'edtAnswer.Text' a des espaces qui peuvent conduire à une erreur de conversion. Essayez de réduire la valeur de la chaîne (supprime les espaces avant/arrière) avant de la convertir en une valeur entière à l'aide de la fonction de découpage, par exemple 'UserAnswer: = StrToInt (Trim (edtAnswer.Text));'. Aussi, vous devriez nous indiquer votre déclaration de variable et certaines valeurs que vous avez saisies dans le champ de texte. Cela devrait rendre beaucoup plus facile à utiliser pour trouver l'erreur. – Sascha

Répondre

3

Lorsque StrToInt rencontre une chaîne qui ne peut pas être convertie en nombre entier, elle déclenche une exception. Le documentation dit:

Si S ne représente pas un nombre valide, StrToInt déclenche une exception EConvertError.

Vous pouvez intercepter cette exception.

try 
    Value := StrToInt(Str); 
except 
    on EConvertError do 
    // handle conversion error 
end; 

Cependant, ce code est plutôt désordonné. En règle générale, les exceptions devraient être exceptionnelles. Ils ne devraient pas faire partie du flux normal de votre programme. Une autre règle générale est que vous ne devez pas gérer les exceptions. Laissez-les se propager vers le haut pour quelque chose qui peut les gérer. Donc, si nous enfreignons ces deux règles, comment pouvons-nous faire mieux? Eh bien, en utilisant TryStrToInt. C'est une fonction qui retourne un Boolean pour indiquer si la conversion a réussi ou non. Le code serait alors se présenter comme suit:

if TryStrToInt(Str, Value) then 
    // handle conversion success by using Value 
else 
    // handle conversion error 
0

En supposant INT1 et Int2 sont 'raisonnable' pour un utilisateur, vous pouvez également utiliser

valeur (par exemple, seul point positif.): = StrToIntDef (Str, -1 { ou autre valeur illégale});

Rend le code légèrement plus simple, peut-être.