for-schleife und if/else == chaos?



  • 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...


Anmelden zum Antworten