2012-10-10 1 views
0

C'est là où je suis à ce jour et quand je saisis un nombre dans la boîte d'édition et appuyez sur le bouton, il se bloque, je Suis un débutant à Delphi s'il vous plaît aider! Merci, MattDelphi - Écrire un programme qui lit une série de chiffres et les additionne jusqu'à ce que l'utilisateur entre 0

var 
    Form3: TForm3; 
    Count: integer; 
    RunningTotal: Real; 
implementation 

{$R *.dfm} 



procedure TForm3.btnEnterClick(Sender: TObject); 
begin 
repeat 

    RunningTotal:= RunningTotal + STRTOINT (edtNum.Text); 
until STRTOINT(edtNum.Text)=0; 
    lblAns.Caption:= FLOATTOSTR (RunningTotal); 

end; 

procedure TForm3.edtNumChange(Sender: TObject); 
begin 

end; 

procedure TForm3.FormCreate(Sender: TObject); 
begin 
Count:=0; 
RunningTotal:=0; 
end; 

end. 
+0

Vous bouclez dans le code lorsque la touche entrée a été pressée. L'utilisateur n'a jamais la possibilité d'entrer un autre numéro ou de modifier le contenu de 'edtNum'. Ainsi, la boucle tournera pour toujours (à moins qu'ils ne commencent par 0). –

+0

En outre, lors de la publication de questions comportant des expressions telles que "plantage" ou "erreur", il est utile d'inclure le contenu de tous les messages d'erreur affichés. Je suppose que, dans ce cas, il s'agit d'un débordement. –

+0

"ça plante" n'est pas bon pour nous. Vous pouvez voir le message d'erreur exact. Nous ne pouvons pas. S'il vous plaît, ne nous faites pas deviner. Dites-nous quelle est l'erreur! –

Répondre

1

Vous bouclez toujours lorsque l'utilisateur fournit sa première valeur. Tout ce que vous devez faire dans le gestionnaire d'événements est de prendre une seule valeur et de la traiter.

procedure TForm3.btnEnterClick(Sender: TObject); 
begin 
    if STRTOINT(edtNum.Text)=0 then 
    lblAns.Caption:= FLOATTOSTR (RunningTotal) 
    else 
    RunningTotal:= RunningTotal + STRTOINT (edtNum.Text); 
end; 

De cette façon, l'utilisateur peut soumettre d'autres numéros, jusqu'à ce qu'il vous fournit un 0.

1

Si vous tapez un caractère au lieu d'un numéro, il se traduira par un exception.You peut traiter l'exception ou vous pouvez empêcher l'utilisateur d'entrer des caractères comme celui-ci

var 
    Form1: TForm1; 
    myvalue : Real = 0; 
implementation 

{$R *.dfm} 



procedure TForm1.btn1Click(Sender: TObject); 
var 
    number : Real; 
begin 
    number := StrToFloat(Edit1.Text); 
    if number = 0 then ShowMessageFmt('The result is %f',[myvalue]) 
    else 
    myvalue := myvalue + number; 
    Edit1.Text := ''; 
end; 

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char); 
begin 
    if not (Key in ['0'..'9','.']) then Key := #0; 
end; 
+0

Bien. Vous obtenez un A sur ses devoirs. –

Questions connexes