AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Probleme mit if-Abfrage!

Ein Thema von Speedmaster · begonnen am 7. Apr 2005 · letzter Beitrag vom 7. Apr 2005
Antwort Antwort
Benutzerbild von Speedmaster
Speedmaster

Registriert seit: 4. Mär 2005
Ort: Karlsruhe
535 Beiträge
 
Delphi 2005 Personal
 
#1

Probleme mit if-Abfrage!

  Alt 7. Apr 2005, 22:13
Bei folgender Funktion trit der Fehler auf das er schon in der Ersten Zeile False zurückgibt, vorher bei der "Debug" abfrage allerdings der Wert True zurückgegeben wird. Daher Stellt sich mir die Frage ob die Anzahl der if Abfragen in einer if verzweigung begrenzt sind??

Delphi-Quellcode:
function TswOptions.CheckIni(Skin: String):Boolean;
var
  IFile: TMemIniFile;
  Test: Boolean;
begin
  try
    IFile := TMemIniFile.Create(Skin);
    // Überprüfung ob die Skindatei vollständig ist
    Test := IFile.SectionExists('swMain'); // Debug
    if IFile.SectionExists('swMain') and
     IFile.SectionExists('swExit') and
     IFile.SectionExists('swMapeditor') and
     IFile.SectionExists('swSingleplayer') and
     IFile.SectionExists('swMultiplayer') and
     IFile.SectionExists('swRefresh') and
     IFile.SectionExists('swJoin') and
     IFile.SectionExists('swCancel') and
     IFile.SectionExists('swHost') and
     IFile.SectionExists('swmHost') and
     IFile.SectionExists('swNames') and
     IFile.SectionExists('swIPList') and
     IFile.SectionExists('swLIBevel') and
     IFile.SectionExists('swIPBevel') and
     IFile.SectionExists('swLogIn') and
     IFile.SectionExists('swCancelLI') and
     IFile.SectionExists('swAPLogo') and
     IFile.SectionExists('swPassEdit') and
     IFile.SectionExists('swUserEdit') and
     IFile.SectionExists('swIPCancel') and
     IFile.SectionExists('swhCommentEdit') and
     IFile.SectionExists('swhPasswordEdit') and
     IFile.SectionExists('swOptions') and
     IFile.SectionExists('swPlayerBox') and
     IFile.SectionExists('swTeamBox') and
     IFile.SectionExists('swMapLabel') and
     IFile.SectionExists('swGSpeedBox') and
     IFile.SectionExists('swHBevel') and
     IFile.SectionExists('swOFileListBox') and
     IFile.SectionExists('swOSelectSkin') and
     IFile.SectionExists('swOApply') and
     IFile.SectionExists('swOCancel') and
     IFile.SectionExists('swOSearchIni') and
     IFile.SectionExists('swOSoundChannelBox') and
     IFile.SectionExists('swOBevel') and
     // Zweites Fenster
     IFile.SectionExists('smMain') and
     IFile.SectionExists('smSearchBoxEdit') and
     IFile.SectionExists('smSelectMap') and
     IFile.SectionExists('smCancel') and
     IFile.SectionExists('smFileListBox') then
     Result := True else Result := False;
    IFile.Free;
  except
    MessageDlg('Error: Unable to open skin file',mtInformation, [mbOk], 0);
  end;
end;
Felix K.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#2

Re: Probleme mit if-Abfrage!

  Alt 7. Apr 2005, 22:16
Das einzige, was die Zahl der Abfragen limitiert, ist die Geschwindigkeit deines Prozessors und die Größe deines Speichers, der den ganzen Assemblercode aufnehmen muss
  Mit Zitat antworten Zitat
Benutzerbild von Speedmaster
Speedmaster

Registriert seit: 4. Mär 2005
Ort: Karlsruhe
535 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Probleme mit if-Abfrage!

  Alt 7. Apr 2005, 22:19
Zitat von Dax:
Das einzige, was die Zahl der Abfragen limitiert, ist die Geschwindigkeit deines Prozessors und die Größe deines Speichers, der den ganzen Assemblercode aufnehmen muss
Dennoch gibt er einen falschen Wert zurück, woran liegt das?
Felix K.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Probleme mit if-Abfrage!

  Alt 7. Apr 2005, 22:22
auch wenn du die if-Bedingungen umbrichst gibt es dafür nur einen haltepunkt. Setzte doch einfach einen haltepunkt und stelle die einzelnen bedingungen in die watches, dann siehst du was nicht stimmt.
Oder du machst einfach eine verschaltete if-anweisung drauf
Delphi-Quellcode:
result := False;
if IFile.SectionExists('swMain') then
  if IFile.SectionExists('swExit') then
    if IFile.SectionExists('swMapeditor') then
      [...]
      result := True
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Speedmaster
Speedmaster

Registriert seit: 4. Mär 2005
Ort: Karlsruhe
535 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Probleme mit if-Abfrage!

  Alt 7. Apr 2005, 22:24
Zitat von SirThornberry:
auch wenn du die if-Bedingungen umbrichst gibt es dafür nur einen haltepunkt. Setzte doch einfach einen haltepunkt und stelle die einzelnen bedingungen in die watches, dann siehst du was nicht stimmt.
Leider habe ich das schon Lange gemacht, das hatte ich glaube ich auch oben ungefähr ausgedrückt. Er bricht bei der ersten Abfrage ab('swMain'), oben drüber gibt er aber den richtigen Wert aus!!
Felix K.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Probleme mit if-Abfrage!

  Alt 7. Apr 2005, 22:26
ich denk mal du debuggst falsch (soll kein vorwurf sein). Versuchs doch noch so wie ich es in meinem letzten beitrag geschrieben hab mit den verschatelten if's
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#7

Re: Probleme mit if-Abfrage!

  Alt 7. Apr 2005, 22:33
yep, das sehe ich genauso. Dass der Debugger scheinbar nach der ersten zeile zum else springt bedeutet gar nichts, denn der sieht alle durch and verknüpften zeilen als eine.

übrigens mußt du gar nicht schreiben

if a and b and c and d and e then Result := True else Result := False; sondern kannst auch schreiben

Result := a and b and c and d and e;
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#8

Re: Probleme mit if-Abfrage!

  Alt 7. Apr 2005, 22:39
Moin!

bttb930 war nun schneller >>>>>
Das er in der ersten If Anweisung gleich False zurückgibt, sieht für dich nur so aus, da der Compiler keinen Code pro If Abfrageteil angibt und somit der Debugger einfach nur: If Bedingung und Verzweigung der If Bedingung kennt. Daher muss nur ein Element deiner AND Verknüpfung fehlschlagen (welches auch immer) und dann gibt er schon false zurück und macht sich nicht mehr die Arbeit den Rest abzuprüfen. Und dabei ist wie gesagt nicht rückschliessbar, das es die erste Bedingung der AND Abfrage ist...
<<<<<

Existieren 120%ig alle aufgeführten Sektionen in dem MemIni File?

MfG
Muetze1
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz