为什么我的循环即使符合条件仍然继续?

时间:2016-05-08 01:31:36

标签: loops delphi while-loop

我正在创建一个程序,它应该是这样的:有一个未知数量的人来参加一个活动。该计划应该获得注册人的姓名和年龄,如果年龄低于13岁,那么这应该算作一个孩子,如果年龄是13或更高,他们应该算作成年人。名称将显示在备忘录中,并且还应显示在场的孩子和成人的数量(我显示在编辑框中)。

我遇到的问题是我使用了while循环。例如,我的条件是,如果大写的名称是'EXIT',程序应该终止,但这不会发生。相反,程序继续询问年龄,然后终止。

这是我的代码:

  name:= inputbox('dialog','Enter your name', '');
  edit1.Text:=name;
  adults:=0;
  children:=0;

  while uppercase(name) <> 'EXIT' do
  begin
    name:= inputbox('dialog','Enter your name', '');
    memo1.Lines.Add(''+name);
    age := strtoint(inputbox('age', 'Enter your age', ''));
    if age<13 then
    begin
      children:=children+1;
      edit3.Text:=inttostr(children)
    end
    else if age>=13 then
    begin
      adults:=adults+1;
      edit2.Text:=inttostr(adults);
    end ;
    showmessage('Hello '+name+', Welcome to our funday');
  end;  // while

2 个答案:

答案 0 :(得分:4)

您的代码将继续执行,因为这与您编写代码的方式完全相同。您需要在输入姓名后进行测试,看看您是否应继续并询问年龄。 (name是一个糟糕的变量名称,因为它很容易与TForm.Name混淆,所以我在下面的代码中将其更改为AName。)

begin
  Adults := 0;
  Children := 0;

  while True do
  begin
    AName:= InputBox('dialog','Enter your name', '');
    if UpperCase(AName) = 'EXIT' then 
      Break;
    Memo1.Lines.Add(AName);
    Age := StrToInt(InputBox('Age', 'Enter your age', ''));
    if Age < 13 then
    begin
      Children := Children + 1;
      Edit3.Text := IntToStr(Children)
    end
    else if Age >= 13 then
    begin
      Adults := Adults + 1;
      Edit2.Text := IntToStr(Adults);
    end;
    ShowMessage('Hello ' + AName + ', Welcome to our funday');
  end;
end;

您可能想重新考虑您的用户界面。编辑控件设计用于用户可以更改内容时使用,并使用它们显示用户无法编辑的值并非真正合适。我建议改用 TLabel ;事实上,你可以只用一个这样的东西:

Label1.Caption := Format('%d adults, %d children', [Adults, Children]);

答案 1 :(得分:2)

你要求这个名字,然后你无条件地要求年龄,所以环路不会在两者之间退出也就不足为奇了。退出循环的检查应在您询问姓名后,但在询问年龄之前进行。

adults   := 0;
children := 0;

while true do
begin
    name := inputbox('dialog', 'Enter your name (or "exit" to exit)', '');
    if uppercase(name) = 'EXIT' then
        break;

    memo1.Lines.Add(''+name);

    age := strtoint(inputbox('age', 'Enter your age', ''));
    if age < 13 then
        children := children + 1;
    else
        adults := adults + 1;

    showmessage('Hello '+name+', Welcome to our funday');
end;

edit2.Text := inttostr(adults);
edit3.Text := inttostr(children);

我不知道Delphi,所以请原谅任何错误。