![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Добрый день. Начал недавно учить delphi, затянуло) читаю уроки и практикуюсь, застрял на цикле while, не могу понять как правильно его написать, помогите пожалуйста, вот код:
Код:
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdCookieManager, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP, StdCtrls, IdAntiFreezeBase, IdAntiFreeze;
type
TForm2 = class(TForm)
Button1: TButton;
IdHTTP1: TIdHTTP;
IdCookieManager1: TIdCookieManager;
Edit1: TEdit;
IdAntiFreeze1: TIdAntiFreeze;
Memo1: TMemo;
Memo2: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
function Pars(T_, ForS, _T: string): string;
var a, b:integer;
begin
Result := '';
if (T_='') or (ForS='') or (_T='') then Exit;
a:=Pos(T_, ForS);
if a=0 then Exit else a:=a+Length(T_);
ForS:=Copy(ForS, a, Length(ForS)-a+1);
b:=Pos(_T, ForS);
if b>0 then
Result:=Copy(ForS, 1, b - 1);
end;
procedure TForm2.Button1Click(Sender: TObject);
var
vs1, game, arena, vhod:string;
pars1:string;
post: Tstringlist;
begin
try
vhod:=IDHTTP1.get(edit1.Text);
game:=IDHTTP1.get('юрл');
if Pos('arena', game)<>0 then
while (vs1 = 'Восстановить') do
begin
try
arena:=IDHTTP1.get('юрл');
Pars1:=Pars('от', vs1, 'до');
vs1:=IDHTTP1.get('юрл'+pars1);
Memo1.Lines.Add('Бой '+pars1 +'завершён');
finally
Memo1.Lines.Add('Закончилась энергия.');
end;
end
else
Memo1.Lines.Add('Не вошли в игру.');
except
end;
begin
Memo1.Lines.Add('Готово');
end;
end;
end.Уверен написал бред, но пытался как мог( Последний раз редактировалось lmikle, 21.05.2015 в 18:32. |
|
#2
|
||||
|
||||
|
Всё правильно. у тебя изначально не установлено значение vs1, а значит она пустая, а значит условие (vs1 = 'Восстановить') не выполняется и цикл пропускается, следовательно, тебе лучше использовать repeat. Ну или как вариант добавить перед структурой while значение vs1 := 'Восстановить', что бы цикл запустился, и обмотать в begin - end;
Для справки, While - это цикл с предусловием, а repeat - послесловием. Код:
//задаем начальное значение, и если оно изменилось, то выходим из цикла.
a:=true;
while a do begin
...
if {} then a:=false;
end;Код:
//Запускаем цикл и пофиг что было изначально repeat a:=КакаятоФункция(); until not a; |
| Этот пользователь сказал Спасибо SCrat.ORS за это полезное сообщение: | ||
Stanei (21.05.2015)
| ||
|
#3
|
|||
|
|||
|
Спасибо, сделал через Repeat, всё работает)
|