Autor |
Beitrag |
Knedcox
      
Beiträge: 79
|
Verfasst: Sa 20.08.05 12:36
Mein Programmteil sieht so aus:
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<>nil) do 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 Christian S.: Topic aus VCL (Visual Component Library) verschoben am Di 23.08.2005 um 11:30
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: 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:
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 
      
Beiträge: 79
|
Verfasst: Sa 20.08.05 12:48
Sorry wenn ich noch mal nerv, aber ich weiß nicht, wo daran mein Fehler ist?
|
|
MrSaint
      
Beiträge: 1033
Erhaltene Danke: 1
WinXP Pro SP2
Delphi 6 Prof.
|
Verfasst: Sa 20.08.05 12:57
das else steht bei der while-Schleife! machs so:
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<>nil) do 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 
      
Beiträge: 79
|
Verfasst: Sa 20.08.05 13:00
Jetzt hab ichs. Merci und Gruß.
|
|
Knedcox 
      
Beiträge: 79
|
Verfasst: 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:
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
|
Verfasst: Sa 20.08.05 13:47
Rück doch mal gescheit ein:
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
      
Beiträge: 616
Erhaltene Danke: 33
Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
|
Verfasst: Sa 20.08.05 13:53
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 ... |
Siehe die 2 Bemerkungen - eine gescheite Einrückung verhindert solche Fehler!
Gruss
Blawen
PS: Dein Code sieht demzufolge so aus:
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 
      
Beiträge: 79
|
Verfasst: Sa 20.08.05 14:05
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
      
Beiträge: 616
Erhaltene Danke: 33
Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
|
Verfasst: Sa 20.08.05 14:10
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 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 else |
Meine obige Aussage (Quelltext) ändert sich noch immer nicht...
Wo ist z.B. das Begin beim "While"?
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
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: Sa 20.08.05 14:17
Dein Source hier :
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 :
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 ! 
_________________ Gruß
Hansa
|
|
JayK
      
Beiträge: 1013
|
Verfasst: Sa 20.08.05 14:21
|
|
Knedcox 
      
Beiträge: 79
|
Verfasst: 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... 
|
|
Blawen
      
Beiträge: 616
Erhaltene Danke: 33
Win XP, Vista, 7
Delphi 5 Prof., BDS 2006 Prof. RAD Studio XE
|
Verfasst: Sa 20.08.05 14:27
|
|
hansa
      
Beiträge: 3079
Erhaltene Danke: 9
|
Verfasst: 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 :
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
|
|