For Schleife kann nicht verlassen werden

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • For Schleife kann nicht verlassen werden

      Hallo,

      in dem folgenden Code, läuft eine For -Schleife 3 Mal durch.
      Aber es soll sobald Exit For getriggert wird, die Schleife verlassen.
      In diesem Fall passiert es nicht.

      Warum?


      BASCOM-Quellcode

      1. Check_user:
      2. Dim I As Byte
      3. For I = 1 To 3
      4. Select Case I
      5. Case "1"
      6. Varname = Larname_1
      7. If Varname = Com_array(2) Then
      8. Check_sucessfull = 1
      9. Exit For
      10. End If
      11. Case "2"
      12. Varname = Larname_2
      13. If Varname = Com_array(2) Then
      14. Check_sucessfull = 1
      15. Exit For
      16. End If
      17. Case "3"
      18. Varname = Larname_3
      19. If Varname = Com_array(2) Then
      20. Check_sucessfull = 1
      21. Exit For
      22. End If
      23. End Select
      24. Next
      25. If Check_sucessfull = 1 Then
      26. Orang_LED = 0
      27. Elseif Check_sucessfull = 0 Then
      28. Orang_LED = 1
      29. End If
      30. Return
      Alles anzeigen
      Die Orange LED leuchtet immer auf.
      Obwohl es in der Case 1 bereits auf Check_sucessfull = 1 setzen und dann die Schleife verlassen sollte.

      Was ist falsch nach eurer Meinung nach.
    • Hallo Zusammen,

      die ganz untere Methode "Check_user" wird in der DO Loop Schleife in einer Select Case Funktion unter Case 6 aufgerufen.
      Soweit funktioniert auch alles gut.
      Das Problem ist, das ich aber auf der anderen Seite, (PC) zwei Mal hintereinander "LOGIN_OK" erhalten.

      Kann es sein, das die Do Loop-Schleife so schnell durchläuft, das ich das zwei Mal bekomme?
      Oder was denkt Ihr was das sein könnte?

      Danke im Voraus

      BASCOM-Quellcode

      1. Do
      2. For Idx = 0 To 3
      3. Result1 = Socketstat(idx , 0) ' get status
      4. Select Case Result1
      5. Case Sock_established
      6. If Flags.idx = 0 Then
      7. Flags.idx = 1
      8. End If
      9. Result1 = Socketstat(idx , Sel_recv) ' get number of bytes waiting
      10. If Result1 > 0 Then
      11. Do
      12. Result1 = Tcpread(idx , S)
      13. Tmp = Split(s , Command_array(1) , "|")
      14. Select Case Command_array(1)
      15. Case "0"
      16. Case "1"
      17. Case "2"
      18. Case "4"
      19. Command_array(1) = "-1"
      20. New_ip_set_info = "0"
      21. Case "5"
      22. Command_array(1) = "-1"
      23. 'Reset Watchdog
      24. Gosub Set_new_login_user
      25. Case "6"
      26. Command_array(1) = "-1"
      27. 'Reset Watchdog
      28. Gosub Check_user
      29. End Select
      30. Loop Until S = ""
      31. End If
      32. Case Sock_close_wait
      33. Closesocket Idx
      34. Case Sock_closed
      35. Bclient = Getsocket(idx , Sock_stream , Local_port , 0) ' get socket for server mode, specify port 5000
      36. Socketlisten Idx
      37. Flags.idx = 0
      38. Case Sock_listen
      39. Case Else
      40. End Select
      41. Next
      42. Loop
      43. End
      Alles anzeigen

      BASCOM-Quellcode

      1. Check_user:
      2. Dim I As Byte
      3. For I = 1 To 3
      4. Select Case I
      5. Case 1
      6. Varname = Larname_1
      7. If Varname = Com_array(2) Then
      8. Check_sucessfull = 1
      9. Exit For
      10. End If
      11. Case 2
      12. Varname = Larname_2
      13. If Varname = Com_array(2) Then
      14. Check_sucessfull = 1
      15. Exit For
      16. End If
      17. Case 3
      18. Varname = Larname_3
      19. If Varname = Com_array(2) Then
      20. Check_sucessfull = 1
      21. Exit For
      22. End If
      23. End Select
      24. Next
      25. If Check_sucessfull = 1 Then
      26. Result1 = Tcpwrite(idx , "LOGIN_OK|{013}{010}")
      27. Elseif Check_sucessfull = 0 Then
      28. Result1 = Tcpwrite(idx , "LOGIN_FAIL|{013}{010}")
      29. End If
      30. Return
      Alles anzeigen