problemy z IF

0

Mam taki problemik. Nie potrafie napisać prawidłowek konstrukcji

if/the/else/end 

itd. Chodzi o 3 Radio Buttony ( PasswordRadioButton, ROT13RadioButton oraz XorRadioButton) w zależności od naciśnietego mam do wyboru 3 rzeczy. Proszę spróbujcie to uporządkować !


procedure TForm1.CryptButtonClick(Sender: TObject);
var j,k:integer;    znak:char; tekst:string;
begin

        If PasswordRadioButton.Checked Then


                if Edit2.Text='' then begin Application.MessageBox('Type password','Crypter',48); exit; end;
                ZmienZnakiNaKlucze;
                k:=1;
                tekst:=Memo2.Lines.Text;
                for j:=1 to Length(tekst) do begin
                znak:= tekst[j];
                znak :=Chr((Ord(znak)+13) xor Klucz[k]);
                tekst[j]:=znak;
                if znak=#0 then begin memo1.Lines.Clear;
                Application.MessageBox('Nie można odszyfrować tym hasłem','Błąd - złe hasło',16); exit; end;
                inc(k);
                if k=length(haslo)+1 then k:=1;
                Memo1.Lines.Text:= tekst;
                end;

        If ROT13RadioButton.Checked Then

        Memo1.Text:=CoderRot13(Memo2.Text);

        If XorRadioButton.Checked Then

        ShowMessage('Xor Avaliable Only For Bosses');



end;
0

moim skromnym zdaniem o jednego enda jest za dużo, najprawdopodobniej pod linijką: Memo1.Lines.Text:= tekst;

0

Nie chce mi się czytać, jakbyć pisał kulturalnie wcięcia i dawał beginy i endy w oddzielnych linijkach, to by było łatwiej. Sam byś pewnie zauważył łatwo o co biega.

0

Potwierdzam post powyżej... Ale coś Ci tu uporządkowałem:


```delphi
var j,k:integer;
    znak:char;
    tekst:string;
begin
  if PasswordRadioButton.Checked then
  if Edit2.Text='' then
  begin
    Application.MessageBox('type password','Crypter',48);
    exit;
  end;
  ZmienZnakiNaKlucze;
  k:=1;
  tekst:=Memo2.Lines.Text;
  for j:=1 to Length(tekst) do
  begin
    znak:= tekst[j];
    znak :=Chr((Ord(znak)+13) xor Klucz[k]);
    tekst[j]:=znak;
    if znak=#0 then
    begin
      memo1.Lines.Clear;
      Application.MessageBox('Nie można odszyfrować tym hasłem','Błąd - złe hasło',16); exit; end;
      inc(k);
      if k=length(haslo)+1 then k:=1;
      Memo1.Lines.Text:= tekst;
    end;
  end;
  if ROT13RadioButton.Checked then  Memo1.Text:=CoderRot13(Memo2.Text);
  if XorRadioButton.Checked then  ShowMessage('xor Avaliable Only for Bosses');
end;
 I na następny raz stosuj te wcięcia :-8 
0

Wstaw po if PasswordRadioButton.Checked then begin-a, a przed if ROT13RadioButton.Checked end-a i wszystko powinno być OK.

Zatem niech to wygląda jak poniżej

begin
  if PasswordRadioButton.Checked then begin
        BLABLABLA;
  end;
  if ROT13RadioButton.Checked then BLABLA2;
  if XorRadioButton.Checked then BLABLA3;
end; 

lub

begin
  if PasswordRadioButton.Checked then begin
        BLABLABLA;
  end else if ROT13RadioButton.Checked then BLABLA2
      else if XorRadioButton.Checked then BLABLA3;
end; 

ps. zanim zaczniecie poprawiać wcięcia w kodzie proszę LICZCIE chociaż ile jest beginów i endów

0

Wstaw po if PasswordRadioButton.Checked then begin-a, a przed if ROT13RadioButton.Checked end-a i wszystko powinno być OK.

Zatem niech to wygląda jak poniżej

begin
  if PasswordRadioButton.Checked then begin
        BLABLABLA;
  end;
  if ROT13RadioButton.Checked then BLABLA2;
  if XorRadioButton.Checked then BLABLA3;
end; 

lub

begin
  if PasswordRadioButton.Checked then begin
        BLABLABLA;
  end else if ROT13RadioButton.Checked then BLABLA2
      else if XorRadioButton.Checked then BLABLA3;
end; 

ps. zanim zaczniecie poprawiać wcięcia w kodzie proszę LICZCIE chociaż ile jest beginów i endów

A nie wygodniej będzie wstawić RadioGroup i zwykłym case'm testować?

1 użytkowników online, w tym zalogowanych: 0, gości: 1