【问题标题】:Delphi - Writing a program that reads a series of numbers and adds them up until the user enters 0 [closed]Delphi - 编写一个程序,读取一系列数字并将它们相加,直到用户输入 0 [关闭]
【发布时间】:2012-10-10 10:41:20
【问题描述】:

这是我目前所处的位置,当我在编辑框中输入一个数字并按下按钮时它崩溃了,我是 Delphi 的新手,请帮助!谢谢,马特

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.

【问题讨论】:

  • 当按下回车键时,您正在循环内部代码。用户永远没有机会输入另一个号码或更改edtNum 的内容。所以循环将永远运行(除非他们先输入 0)。
  • 此外,当发布包含“崩溃”或“错误”等短语的问题时,包含显示的任何错误消息的内容会有所帮助。我猜,在这种情况下,它是关于溢出的。
  • “它崩溃了”对我们没有好处。您可以看到确切的错误消息。我们不可以。请不要让我们猜测。告诉我们错误是什么!
  • 这项任务读起来就像是在 Turbo Pascal 过去的好日子里使用控制台应用程序完成的家庭作业。
  • 我通常会在心跳中拒绝这样的问题,但我会很好,因为你是 Delphi 的新手。

标签: delphi delphi-7 delphi-xe2 delphi-2010 delphi-2009


【解决方案1】:

当用户提供他的第一个值时,您将永远循环。您需要在事件处理程序中做的就是获取单个值并对其进行处理。

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

这样用户可以提交更多号码,直到他为您提供0

【讨论】:

    【解决方案2】:

    如果您将键入字符而不是数字,则会导致异常。您可以处理异常,也可以阻止用户输入这样的字符

    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;
    

    【讨论】:

    • 好。你的作业得了 A。
    猜你喜欢
    • 2018-09-09
    • 2022-10-14
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 2021-05-14
    • 2020-01-22
    相关资源
    最近更新 更多