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

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

      Beitrag von tschoeatsch ()

      Dieser Beitrag wurde vom Autor aus folgendem Grund gelöscht: Die Vorredner haben's besser durchschaut. ().
    • Neu

      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