我正在创建一个程序,它应该是这样的:有一个未知数量的人来参加一个活动。该计划应该获得注册人的姓名和年龄,如果年龄低于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
答案 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,所以请原谅任何错误。