if Abfrage in PicoC mit && und ||

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

    #1

    if Abfrage in PicoC mit && und ||

    Hallo

    Mach meine ersten Schritte mit dem PicoC und komme bei den IF abfragen nicht weiter und hätte daher eine kurze Frage :

    Ist folgende Abfrage nicht möglich ? if (( A || B) && C)

    Also UND und ODER.

    Danke Euch

    beste Grüße
    Mandi

  • Labmaster
    Lox Guru
    • 20.01.2017
    • 2696

    #2
    Zitat von MandiNice
    Hallo

    Mach meine ersten Schritte mit dem PicoC und komme bei den IF abfragen nicht weiter und hätte daher eine kurze Frage :

    Ist folgende Abfrage nicht möglich ? if (( A || B) && C)

    Also UND und ODER.

    Danke Euch

    beste Grüße
    Mandi
    Doch, warum soll das nicht möglich sein ?
    Die Frage ist halt, was A B und C ist ?
    Bei || und && handelt es sich in PicoC wie auch in allen C Diakekten um logische Operanden, im Vergleich dazu gibt es halt noch die binären, also | und &.

    (( A || B) && C) wäre demnach:

    A!=0 und C!=0 ist !=0
    oder
    B!=0 und C!=0 ist auch !=0



    Kommentar

    • Gast

      #3
      Hallo

      Danke.
      ( e1 > 0 || e2 > 0) funktioniert

      (e1 || e2) geht nicht . Er interpretiert Werte größer 0 nicht automatisch als True.

      War ich von meinem C Compiler so gewohnt.




      Kommentar


      • Labmaster
        Labmaster kommentierte
        Kommentar bearbeiten
        Was für einen Datentyp hat denn e1 und e2 ?
    • Gast

      #4
      Hab es mit float und int probiert.

      bool gibt es ja leider nicht ?

      Kommentar

      • Benjamin Jobst
        Lox Guru
        • 25.08.2015
        • 1199

        #5
        Gast genau das ist ja das Problem: Wenn es True nicht gibt, woher soll er denn wissen, welche Bedingung "e1" sein soll? Das musst du schon genauer spezifizieren - im Gegensatz zu Sprachen oder Compilern, die ein Boolean verstehen. PicoC ist eben nicht C ;-)
        MfG Benny

        Kommentar


        • Robert L.
          Robert L. kommentierte
          Kommentar bearbeiten
          C99 §6.5.13/3: The && operator shall yield 1 if both of its operands compare unequal to 0; otherwise, it yields 0. The result has type int.

          C99 §6.5.14/3: The || operator shall yield 1 if either of its operands compare unequal to 0; otherwise, it yields 0. The result has type int.

          aber kann schon sein, dass sich PicoC nicht dran hält, wäre aber sehr "komisch",..

          anstelle von "ture/false" gibts wohl "trueValue" und "falseValue"
          A very small C interpreter. Contribute to jpoirier/picoc development by creating an account on GitHub.
          Zuletzt geändert von Robert L.; 21.01.2018, 10:25.
      • Robert L.
        MS Profi
        • 26.08.2015
        • 922

        #6
        A very small C interpreter. Contribute to jpoirier/picoc development by creating an account on GitHub.


        case TokenLogicalAnd:
        ResultInt = BottomInt && TopInt;
        break;

        schaut mal nicht so schlecht aus,
        sollte das tatsächlich nicht funktionieren, müsste ja der Compiler den Loxone verwendet das falsch machen..??!

        Kommentar

        • Jan W.
          Lox Guru
          • 30.08.2015
          • 1498

          #7
          (e1 || e2) geht nicht . Er interpretiert Werte größer 0 nicht automatisch als True.
          Welche Fehlermeldung bekommst Du denn? Ich Deinen Code es kurz im Pico-C "Simulator" getestet, da geht es. Um ein komplexeres Skript zu testen bzw. einen Fehler zu finden, hatte ich mir vor einiger Zeit die Originalversion von Zig Saleeba des oben verlinkten Pico-C Codes heruntergeladen und Mit MS Visual Studio Community 2015 kompiliert.

          Insoweit hat Robert L. recht, aber wer weiß, was Loxone aus dem Code gemacht hat?

          Gruß Jan
          Miniserver v14.5.12.7, 2x Ext., 2x Relay Ext., 2x Dimmer Ext., DMX Ext., 1-Wire Ext., Gira KNX Tastsensor 3 Komfort, Gira KNX Präsenzmelder, Fenster- und Türkontakte, Loxone Regen- und Windsensor, Gira Dual Q Rauchmelder vernetzt, 1x Relais-Modul
          Loxberry: SmartMeter, MS Backup, CamConnect, Weather4Lox
          Lüftung: Helios KWL EC 370W ET mit Modbus TCP - via Pico-C
          Heizung: Stiebel Eltron WPF 5 cool (Sole-Wasser WP) mit ISG, FB-Heizung mit 18 Kreisen, Erdsonde - via modbus/TCP
          Node-RED: IKEA Tradfri

          Kommentar

          • romildo
            Lebende Foren Legende
            • 25.08.2015
            • 5169

            #8
            Zitat von MandiNice
            ...(e1 || e2) geht nicht . Er interpretiert Werte größer 0 nicht automatisch als True....
            Macht er doch, zumindest bei mir. Loxone Version 9.1.10.30

            Wenn was nicht geht, kannst Du am Ausgang TeQ den Fehler, sofern vorhanden, auslesen.

            Nachtrag:
            Natürlich nur bei int.
            Zuletzt geändert von romildo; 22.01.2018, 08:25.
            LG Romildo

            Kommentar

            Lädt...