Autor Beitrag
Knedcox
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Sa 20.08.05 12:36 
Mein Programmteil sieht so aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 if Application.MessageBox('Wollen Sie die Daten wirklich löschen?','Hinweis',MB_OKCANCEL)=IDOK then
     begin
       vorg:= start;
       zeiger:=vorg^.Next;
       while (zeiger^.Name<> Memo1.Lines.Text) and (zeiger^.Next<>nildo
          begin
           vorg:=vorg^.Next;
           zeiger:=zeiger^.Next;
          end  <= dieses end ist mein Problem
       else vorg^.Next:=zeiger^.Next;
   end;


Wenn ich das END ohne ";" schreib, kommt als Fehlermeldung "END erwartet aber ELSE gefunden" und wenn ich END mit ";" schreib, kommt als Fehlermeldung "Kein ; vor ELSE".

Was soll ich machen, damit es funktioniert?


Moderiert von user profile iconChristian S.: Topic aus VCL (Visual Component Library) verschoben am Di 23.08.2005 um 11:30
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 20.08.05 12:38 
Was du machen sollst? Dir deinen Code mal genauer angucken. Da gibt es nämlich noch ein begin und end welches zu dem if gehört:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
if
begin
  while
  begin
  end
  else
end

so sieht es nämlich bei dir im Moment aus.
Knedcox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Sa 20.08.05 12:48 
Sorry wenn ich noch mal nerv, aber ich weiß nicht, wo daran mein Fehler ist?
MrSaint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1033
Erhaltene Danke: 1

WinXP Pro SP2
Delphi 6 Prof.
BeitragVerfasst: Sa 20.08.05 12:57 
das else steht bei der while-Schleife! machs so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
 if Application.MessageBox('Wollen Sie die Daten wirklich löschen?','Hinweis',MB_OKCANCEL)=IDOK then
     begin
       vorg:= start;
       zeiger:=vorg^.Next;
       while (zeiger^.Name<> Memo1.Lines.Text) and (zeiger^.Next<>nildo
          begin
           vorg:=vorg^.Next;
           zeiger:=zeiger^.Next;
          end;
     end
     else vorg^.Next:=zeiger^.Next;



MrSaint

_________________
"people knew how to write small, efficient programs [...], a skill that has subsequently been lost"
Andrew S. Tanenbaum - Modern Operating Systems
Knedcox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Sa 20.08.05 13:00 
Jetzt hab ichs. Merci und Gruß.
Knedcox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Sa 20.08.05 13:43 
Als ich es vorhin ausprobiert hab, hats ja gleich funktioniert. Allerdings muss ich jetzt feststellen, dass ich es scheinbar gar nicht kapiert hab (auch wenn ich das zuerst dachte). Denn jetzt hab ich an anderer Stelle das gleiche Problem.

Vielleicht kann mir ja noch mal jemand sagen, wo in dem Code der Fehler steckt:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button5Click(Sender: TObject);
begin
     if edit1.Text <> '' then begin
                                  Zeiger:=start;
                                  while Zeiger^.Name <> Edit1.Text do
                                     Zeiger:=Zeiger^.Next;
                                  end
                                  else begin
                                         Memo1.Lines.Text:=Zeiger^.Name;
                                         Memo2.Lines.Text:=Zeiger^.Kuerzel;
                                         Memo3.Lines.Text:=Zeiger^.Schluessel;
                                         Memo3.Lines.Add('string');
                                       end;
                                end  <= hier hängts
     else if ...


Als Fehlermeldung kommt immer, ";" erwartet aber ELSE gefunden. Und wenn ich dann ein ";" hinschreib, kommt als Fehlermeldung "Deklaration erwartet, aber ELSE gefunden".

Wie gesagt, bin echt totaler Anfänger... Vielleicht kann mir auch jemand sagen, wo ich das nachlesen kann.
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 20.08.05 13:47 
Rück doch mal gescheit ein:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button5Click(Sender: TObject);
begin
  if edit1.Text <> '' then
  begin
    Zeiger := start;
    while Zeiger^.Name <> Edit1.Text do
      Zeiger := Zeiger^.Next;
  end
  else
  begin
    Memo1.Lines.Text := Zeiger^.Name;
    Memo2.Lines.Text := Zeiger^.Kuerzel;
    Memo3.Lines.Text := Zeiger^.Schluessel;
    Memo3.Lines.Add('string');
  end;
  end <= hier hängts
  else
  if ...

Wo soll denn das markierte end hingehören?
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: Sa 20.08.05 13:53 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.Button5Click(Sender: TObject);
begin
  if edit1.Text <> '' then
    begin
      Zeiger := start;
      while Zeiger^.Name <> Edit1.Text do
      Zeiger := Zeiger^.Next;
    end
  else
    begin
      Memo1.Lines.Text := Zeiger^.Name;
      Memo2.Lines.Text := Zeiger^.Kuerzel;
      Memo3.Lines.Text := Zeiger^.Schluessel;
      Memo3.Lines.Add('string');
    end;
  end <= hier hängts  // Klaro wo hast Du den das zugehörige begin?
  else               //  wo hast Du den das zugehörige IF ?
  if ...

Siehe die 2 Bemerkungen - eine gescheite Einrückung verhindert solche Fehler!

Gruss
Blawen

PS: Dein Code sieht demzufolge so aus:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button5Click(Sender: TObject);
begin
  if edit1.Text <> '' then
    begin
      Zeiger := start;
      while Zeiger^.Name <> Edit1.Text do
      Zeiger := Zeiger^.Next;
    end
  else
    begin
      Memo1.Lines.Text := Zeiger^.Name;
      Memo2.Lines.Text := Zeiger^.Kuerzel;
      Memo3.Lines.Text := Zeiger^.Schluessel;
      Memo3.Lines.Add('string');
    end;
end;
Knedcox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Sa 20.08.05 14:05 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button5Click(Sender: TObject);  
begin  
  if edit1.Text <> '' then  
    begin  
      Zeiger := start;  
      while Zeiger^.Name <> Edit1.Text do  
       Zeiger := Zeiger^.Next;  
      end  (Dieses end gehört zum while da ich ja im ursprünglichen Programmteil dieses Threads kein end nach dem while hatte und dann immer die Fehlermeldung kam) 
      else(Dieses else bezieht sich auch aufs while)  
       begin  
        Memo1.Lines.Text := Zeiger^.Name;  
        Memo2.Lines.Text := Zeiger^.Kuerzel;  
        Memo3.Lines.Text := Zeiger^.Schluessel;  
        Memo3.Lines.Add('string');  
       end;  
    end (Und das end hier gehört zum zweiten begin von oben)
  else (Und das else gehört zum ersten if)
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: Sa 20.08.05 14:10 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
procedure TForm1.Button5Click(Sender: TObject);  
begin  
  if edit1.Text <> '' then  
    begin  
      Zeiger := start;  
      while Zeiger^.Name <> Edit1.Text do Zeiger := Zeiger^.Next;  
    end  (Dieses end gehört zum while // FALSCH!!
  else( Dieses else bezieht sich auch aufs while)  // FALSCH!
    begin  
      Memo1.Lines.Text := Zeiger^.Name;  
      Memo2.Lines.Text := Zeiger^.Kuerzel;  
      Memo3.Lines.Text := Zeiger^.Schluessel;  
      Memo3.Lines.Add('string');  
    end;  
  end //???
  else //???


Meine obige Aussage (Quelltext) ändert sich noch immer nicht...

Wo ist z.B. das Begin beim "While"?
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
While not Ende DO
begin
  mache was;
  IF Abbruchbedingung THEN Ende = True
                      ELSE Ende = False;
End;


PS: Seit wann kennt eine "While" Schleife ein "Else"?
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Sa 20.08.05 14:17 
Dein Source hier :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button5Click(Sender: TObject);
begin
     if edit1.Text <> '' then begin
                                  Zeiger:=start;
                                  while Zeiger^.Name <> Edit1.Text do
                                     Zeiger:=Zeiger^.Next;
                                  end
                                  else begin
                                         Memo1.Lines.Text:=Zeiger^.Name;
                                         Memo2.Lines.Text:=Zeiger^.Kuerzel;
                                         Memo3.Lines.Text:=Zeiger^.Schluessel;
                                         Memo3.Lines.Add('string');
                                       end;
                                end  <= hier hängts
     else if ...


sähe bei mir so aus :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
procedure TForm1.Button5Click(Sender: TObject);
begin
  if edit1.Text <> '' then begin
    Zeiger:=start;
    while Zeiger^.Name <> Edit1.Text do
      Zeiger:=Zeiger^.Next;
  end
  else begin
    Memo1.Lines.Text:=Zeiger^.Name;
    Memo2.Lines.Text:=Zeiger^.Kuerzel;
    Memo3.Lines.Text:=Zeiger^.Schluessel;
    Memo3.Lines.Add('string');
  end;
end  <= hier hängts
else if ...


Dem Borland Style-Guide entspricht dabei nicht, daß die begins in derselben Zeile sthen, wie if, while usw. Ich will aber lieber sehen zu welchem If, while die ends gehören und nichtg, daß sie zu einem begin gehören. Das ist sowieso klar.

Aber egal. Selbst ein Blinder mit Krückstock sieht jetzt, daß es zu dem else gar kein if gibt !! Und bei dem "hier hängts" da bringst Du Delphi vollkommen durcheinander. Klar ist : da muß zwingend ein ; hin. Wird der gesetzt, dann guckt sich der Compiler das nächste Wort an und das ist ein else. Dein Pech ist nun, daß bei else wohl auch immer das Zeichen davor überprüft wird und das ist ein ; der vor diesem else (wenn überhaupt ein if da wäre) nichts zu suchen hat ! 8)

_________________
Gruß
Hansa
JayK
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1013



BeitragVerfasst: Sa 20.08.05 14:21 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
procedure TForm1.Button5Click(Sender: TObject);  
begin  
  if edit1.Text <> '' then  
  begin  
    Zeiger := start;  
    while Zeiger^.Name <> Edit1.Text do Zeiger := Zeiger^.Next;  
  end  
  else // Du schriebst: "(Dieses else bezieht sich auch aufs while)" 
       // Wozu ein else für ein while frag ich mich??
  begin  
    Memo1.Lines.Text := Zeiger^.Name;  
    Memo2.Lines.Text := Zeiger^.Kuerzel;  
    Memo3.Lines.Text := Zeiger^.Schluessel;  
    Memo3.Lines.Add('string');  
  end // ; weg
// das Fehler-end weg, wozu soll das hier überhaupt sein??
  else 
  // hier Code nach dem else, 
  // entweder in begin...end eingeschlossen 
  // oder überhaupt kein begin oder end schreiben, 
  // wenn nur eine Codezeile bei else ausgeführt werden soll


Zitat:
Wo ist z.B. das Begin beim "While"?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
While not Ende DO
begin // <-- Hier vielleicht?!?
  mache was;
  Abbruchbedingung?
End;

:rofl:

// EDIT: :shock: 3 Leute waren schneller als ich :rofl:
Knedcox Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 79



BeitragVerfasst: Sa 20.08.05 14:24 
Jetzt klappts. Der Hinweis das zu einem WHILE kein ELSE passt, war der "Schlüssel-Hinweis", der mir die Augen geöffnet hat.

Danke für Eure Geduld... :D
Blawen
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 616
Erhaltene Danke: 33

Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
BeitragVerfasst: Sa 20.08.05 14:27 
user profile iconJayK hat folgendes geschrieben:

Zitat:
Wo ist z.B. das Begin beim "While"?

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
While not Ende DO
begin // <-- Hier vielleicht?!?
  mache was;
  Abbruchbedingung?
End;


Klaro, die Aussage bezog sich ja auch nicht auf mein Beispiel, sondern auf den Code von Knedcox!
hansa
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3079
Erhaltene Danke: 9



BeitragVerfasst: Sa 20.08.05 14:52 
@JayK : Dein Source ist aber fast genauso schwer zu lesen (zumindest um verwaiste begin/end zu suchen), wie der von mir zitierte. Ich habe noch nie verstanden, warum der Style-Guide vorschlägt, die Begins an den Zeilenanfang zu schreiben. Nach Style-Guide sähe er so aus :

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
procedure TForm1.Button5Click(Sender: TObject);  
begin  
  if edit1.Text <> '' then 
  begin  
    Zeiger:=start;  
    while Zeiger^.Name <> Edit1.Text do  
      Zeiger:=Zeiger^.Next;  
  end  
  else
  begin  
    Memo1.Lines.Text:=Zeiger^.Name;  
    Memo2.Lines.Text:=Zeiger^.Kuerzel;  
    Memo3.Lines.Text:=Zeiger^.Schluessel;  
    Memo3.Lines.Add('string');  
  end;  
end  <= hier hängts  
else if ...


Drucke den mal aus und den von mir auch und lege die zwei Ausdrucke nebeneinander. Ich weiche in diesem einzigen Punkt bewußt vom Style-Guide ab ! Bei Prozeduren teilweise über 5 DIN A 4 Seiten hat sich das als wesentlich übersichtlicher erwiesen.

_________________
Gruß
Hansa