void __fastcall TForm1::Button1Click(TObject *Sender)
{
int nb_un;
nb_un=random(1+99);
if(Edit1>nb_un)
{
MsgBox("Entrez un plus petit chiffre");
}
if(Edit1<nb_un)
{
MsgBox("Entrez un plus grand chiffre");
}
if(Edit1 == nb_un)
{
MsgBox("Vous l'avez eu");
}
}
//---------------------------------------------------------------------------
je sais que c'est très basique mais je suis débutant et c'est mon premier programme en c++
alors si quelqu'un voudrait m'aider svp soit en corrigeant mes erreurs ou simplement me disant comment on fait pour mettre un TEdit en variable int.
quelques petites explications sur le conversion en int d'un TEdit:
Un TEdit contient une propriété Text qui n'est autre qu'un AnsiString.
Les AnsiStrings possèdent des Methodes pour travailler au niveau des
chaines, ici j'ai utilisé ToInt() pour convertir en int mais il en
existe plein (ToDouble(), Length(), etc....)
Le truc avec la Methode ToInt() c'est qu'elle déclenche une exception
si la valeur est incorrecte (chaine vide ou bien contenant des
caractères impossibles à convertir en entiers (lettres ou ponctuation))
pour éviter que l'utilisateur ne puisse saisir n'importe quoi, j'ai
fait un filtrage directement en réponse à l'évenement d'appui sur une
touche pour ne garder que les chiffres ou les caractères qui
m'interressent (entrée ou effacement).
bon, maintenant la conversion n'échouera pas à cause de mauvais
caractères, mais la chaine peut très bien être vide. Pour réagir à
cela, 2 possibilités :
- soit en testant que la chaine n'est pas vide :
if(Edit1->Text == "")
{
Application->MessageBoxA("La chaine est vide", "Erreur", MB_OK) ;
}
- soit en interceptant l'exception et en affichant un message
personnalisé, ce que j'ai fait dans l'exemple ci-dessus avec le bloc
Try { } Catch {} . Personellement je préfère cette methode car elle me
permet de m'assurer que je n'ai pas oublié une situation à traiter et
que je ne me retrouverai pas avec un message en anglais
incompréhensible pour l'utilisateur au cas où on tomberait sur une
situation imprévue ...
vez_from_hell
Messages postés14Date d'inscriptionjeudi 10 février 2005StatutMembreDernière intervention15 mars 2006 11 févr. 2005 à 23:22
merci ça m'a beaucoup aidé mais maintenant j'ai un autre problème.
Si je veut filtrer les nombres qui sont supérieur à 99 et faire apparaître un MessageBox pour avertir de l'invalidité, ça ne fonctionne pas. J'ai essayé
if(Edit1->Text > "99")
{
Application->MessageBoxA("This is not valid. Try again", "Error", MB_OK|MB_ICONSTOP) ;
return;
}
mais ça ne marche pas.
Pouvez vous m'indiquer l'astuce svp.
Merci d'avance
Dvdmizo
Messages postés74Date d'inscriptionjeudi 6 mars 2003StatutMembreDernière intervention 3 mai 2006 12 févr. 2005 à 17:34
si tu récupères la valeur dans un int ça sera plus facile ;-)
...
unsigned int nombre_saisi ;
...
try // on essaye de récupérer en int la valeur saisie dans Edit1
{
nombre_saisi = Edit1->Text.ToInt() ;
}
catch(...) // si la valeur déclenche une exception car elle n'est
// pas transformable en int on averti l'utilisateur
{
Application->MessageBoxA("Le nombre saisi n'est pas valide", "Erreur", MB_OK|MB_ICONSTOP) ;
return ; // et on sort de la fonction
}
if(nombre_saisi > 99)
{
Application->MessageBoxA("This is not valid. Try again", "Error", MB_OK|MB_ICONSTOP) ;
return;