Ankündigung

Einklappen
Keine Ankündigung bisher.

Validierung der if-condition im else Zweig

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    [EibStudio] Validierung der if-condition im else Zweig

    Ich möchte per Button den Wert PcUvr_ModeHk4 toggeln.
    Dieser Code funktioniert nicht wie erwartet, denn bei jedem Button press werden alle drei Variablen, testA, testB, testC um eins erhöht und es bleibt immer PcUvr_ModeHk4 == PCUVR_PCAUTO !
    Code:
    testA = 0
    testB = 0
    testC = 0
    if(pbutton(IdBut_D_H_HK4_MODE,PID_DACH_HZ) == 1)  then{
    	testA = testA +1;
    	if PcUvr_ModeHk4 == PCUVR_PCAUTO then{
    		testB = testB +1;
    		PcUvr_ModeHk4 = PCUVR_UVR_SBY ;
    		}else{
    		testC = testC+1;
    		 PcUvr_ModeHk4 =  PCUVR_PCAUTO ;
    		}endif
    	}endif;
    Dagenegen funktioniert dies wie gewünscht:
    Code:
    testA = 0
    testB = 0
    testC = 0
    tmp   = PCUVR_PCAUTO
    if(pbutton(IdBut_D_H_HK4_MODE,PID_DACH_HZ) == 1)  then{
    	testA = testA +1;
    	if PcUvr_ModeHk4 == PCUVR_PCAUTO then{
    		testB = testB +1;
    		tmp = PCUVR_UVR_SBY ;
    		}else{
    		testC = testC+1;
    		 tmp =  PCUVR_PCAUTO ;
    		}endif;
    	PcUvr_ModeHk4 = tmp;
    	}endif;
    Das if-else Stratement ist hier etwas "ungewöhnlich" implementiert.
    Bug oder Feature?

    Mit EibStudio v3.004 erstellt.

    Gruß,
    Alexander

    #2
    wenn ich's recht verstehe, liegt das an der verschachtelten if-Anweisung. Die innere wird glaube ich von der äußeren komplett invalidiert, so das von der inneren der if- und der else-Zweig ausgeführt wird. Damit ist deine Variable immer auf "auto".
    Mit dem TMP-Konstrukt rettest Du den Wert aus dem inneren If-Zweig und setzt ihn dann zum Schluss wieder auf Deine Variable, dadurch klappt es.

    Ich würde die Verschachtelung aber glaube ich lieber komplett auflösen!
    ....und versuchen Sie nicht erst anhand der Farbe der Stichflamme zu erkennen, was Sie falsch gemacht haben!

    Kommentar


      #3
      Ich glaube, im Handbuch steht genau zu diesem Thema etwas.

      Gruß Markus

      Kommentar


        #4
        Zitat von Marha Beitrag anzeigen
        Ich glaube, im Handbuch steht genau zu diesem Thema etwas.

        Gruß Markus
        Danke,
        habs jetzt auch gefunden, Seite 112 im Handbuch für die Version 3:
        Der else-Zweig einer if-Funktion ist wie eine zweite eigenständige if-Funktion mit negierter Abfragebedingung zu verstehen.
        [EibPC]
        a=AUS
        b=1
        c='1/2/3'b01
        if systemstart() then {
        if b==1 then {
        write('1/2/3'b01,AUS);b=2
        } else {
        write('1/2/3'b01,EIN)
        } endif
        } endif
        // identisch zu
        // if systemstart() then {
        // if b==1 then write('1/2/3'b01,AUS);b=2 endif
        // if !(b==1) then write('1/2/3'b01,EIN) endif
        // } endif
        Gruss,
        Alexander

        Kommentar

        Lädt...
        X