|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Помогите разобраться в цикле While
Добрый день. Начал недавно учить 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, всё работает)
|