for-schleife und if/else == chaos?
-
Was hab ich gesagt ? Routine Schritt für Schritt durchgehen und ein wenig hirnen. Nicht alles vorkauen, <dattel> soll selber drauf kommen
-
codewalker ich verstehe dich nicht ganz.
1. was ist an der for-schleife denn nicht gut? :=))
2. wird doch erst wenn die bedingung der if-anweisung:
"if(Client->UserName == "Admin" && Client->PassWord == "6578")"
erfüllt ist, der erste break gemacht. es kommt ja aber garnicht mal soweit.kurze erklährung der schleife:
in der ersten if-anweisung wird überprüft ob der empfangene benutzername und passwort mit dem der TStringList übereinstimmt.
falls ja, also ein berechtigter benutzer, dann wid noch kurz überprüft ob es evlentuell der admin ist. falls ja kommt er in das administrations directory (AHome), falls es doch kein admin war, kommt er (else) in das standard directory (Home)
falls nun aber bei der ersten überprüfung garkeine übereinstimmung stattfindet, soll die letzte else anweisung ausgeführt werden und den benutzer disconnecten da er keinen zugriff hat.
-
für jeden Fall, der eintreten kann, gibt es ein "break". Somit wird die Schleife _beendet_. Vermutlich verwechselst du "break" mit "continue".
"break" beendet nicht einen SchleifenDURCHGANG, sondern die ganze Schleife !
[ Dieser Beitrag wurde am 25.04.2003 um 16:24 Uhr von CodeWalker editiert. ]
-
Original erstellt von <dattel>:
da der benutze benutzername und passwrt beim client OK istOffensichtlich sind Benutzername und Passwort eben nicht OK. Um das einfacher überprüfen zu können solltest du zum Debuggen die Ergebnisse der IndexOf-Abfragen in separaten Variablen speichern und diese dann mit x vergleichen.
-
codewalker:
""break" beendet nicht einen SchleifenDURCHGANG, sondern die ganze Schleife !"ja ich weis doch. das will ich doch auch. was bringt es mir wenn die schleife weiter überprüft, wenn bereits eine identifikation stattgefunden hat? deshald die breaks.
Jansen:
"Offensichtlich sind Benutzername und Passwort eben nicht OK"
eben doch. schau, wie bereits gesagt, wenn ich die letzte else anweisung weglasse, klappt ja die erste if-anweisung. also muss benutzername und passwort OK sein
-
Hi,
überlege mal was du machen willst?
Du willst überprüfen ob UserName und Passwort zusammengehören (in der selben Zeile von Listen stehen) - richtig? Wenn ja, wie macht man das denn am besten?1. Jedes Element der Liste durchgehen und überprüfen ob Passwort und UserName an dieser Stelle stehen?
2. Jedes Element der Liste durchgehen, einzeln in eine Datei schreiben und dann die Dateien binär vergleichen?
3. oder doch anders?
Na mal ein wenig überlegen!
MFG
Alexander Sulfrian
[ Dieser Beitrag wurde am 25.04.2003 um 17:12 Uhr von Alexander Sulfrian editiert. ]
-
hallo,
ich denke das es an der klammerung der if liegt. es ist leider nicht möglich den code zu testen, aber wenn du sicher bis, das das if true ergibt, und er dennoch in den else-teil geht, dann stimmt mit der if was nicht. ich würde mal an der klammerung ansetzen:
if((Users->IndexOf(Client->UserName) == x) && (PassWD->IndexOf(Client->PassWord) == x))
versuchs mal so, und lass dir wie j gesagt hat beim debuggen die werte ausgeben. aber ich denke das bei dieser klammerung das ding funktioniert, sofern das if wirklich true ergibt...
mfg
murph
-
hallo.
ich habe den fehler gefunden kann ihn aber nicht lösen
:p
habe ihn nicht durch variablen anzeige gefunden sondern mir ist grad ins auge gesprungen das.. also:wieso nun verflixt gleich zu der letzten else anweisung gesprungen wird ist mir jetzt klar. zwar ist der benutzername und das passwort das vom client gesendet wurde, korrekt und diese beiden sind auch korrekt in TStringList (Users und PassWD) vorhanden DOCH es wird falsch überprüft bzw. einmalig abgefragt und wenn an der x position BN und PS nicht übereinstimmen, ääätsch: else! es müsste so sein das bevor else unten kommt, erst die ganze StringList gecheckt wird, anstatt nur grad die einte position. das ist das problem. wie lös ich das jetzt?
-
das meine ich doch
noch mal: "break" beendet nicht einen ScheifenDURCHLAUF, sondern die gesamte Schleife ! Die Programmausführung geht NACH der Schleife weiter ! Die Schleife ist, so wie du sie programmiert hast, völlig sinnlos.
-
wie muss ich die schleife den nun richtig "aufbauen" ? hab keinen schimmer wie ich es sonst machen soll als ich es bis jetzt gemacht habe...
-
Schade, dass ich mich als Moderator zurückhalten muss und nicht frei heraus meine Meinung über die Auffassungsgabe einiger Besucher hier sagen darf ...
Und nein, damit meine ich nicht CodeWalker.
Pseudocode:
Index von Benutzername in Liste1 ermitteln; if (not Benutzer in Liste1) Abbruch; else { if(Liste2[Index] == Passwort) { if (Benutzer == Admin) Adminpfad; else Benutzerpfad; } else Abbruch; }
-
entweder die "break" durch "continue" ersetzen, ganz weglassen oder das letzte "break" weglassen.
"break" setzt du da, wo ein weiteres Durchlaufen einer Schleife sinnlos wird, weil das gewünschte Ergebnis schon gefunden ist. In diesem Fall also dort, wo Loginname und Paßwort gefunden wurden.[ Dieser Beitrag wurde am 25.04.2003 um 18:26 Uhr von CodeWalker editiert. ]
-
so?
for(int x = 0; x < 5; x++) { if(Users->IndexOf(Client->UserName) < 0) { Client->CloseRequest = true; break; } else { if(Users->Strings[x] == Client->UserName && PassWD->Strings[x] == Client->PassWord) { if(Client->UserName == "Admin" && Client->PassWord == "3343") { Client->HomeDir = AHome; } else { Client->HomeDir = Home; } } else { break; } } }
ich krieg es nicht hin. verdammt nochmals
-
hier noch mal dein 1. Code:
for(int x = 0; x < 5; x++) { if(Users->IndexOf(Client->UserName) == x && PassWD->IndexOf(Client->PassWord) == x) { if(Client->UserName == "Admin" && Client->PassWord == "6578") { Client->HomeDir = AHome; break; // <= hier sinnvoll, wenn in der Schleife sonst nichts mehr verarbeitet werden soll } else { Client->HomeDir = Home; break; // dito } } else { Client->CloseRequest = true; // break; // <= hier kein break, höchstens "continue", da Schleife weiterlaufen muß } }
[ Dieser Beitrag wurde am 25.04.2003 um 19:04 Uhr von CodeWalker editiert. ]
-
das hilft mir nicht wirklich weiter, bzw. löst das problem nicht.
-
*haare rauf*
es sollte zumindest das eine Problem lösen, daß deine "for"-Schleife auch durchlaufen wird, bis Username und Paßwort gefunden sind oder aber nix paßt.
Wenns jetzt immer noch nicht erwartungsgemäß läuft, sind noch irgendwo in den Codeteilen Fehler, die du uns noch nicht gezeigt hast...