- Akku Tests und Balkonkraftwerk Speicher         
Ergebnis 1 bis 10 von 13

Thema: mehrfach Abfrage in C

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076

    mehrfach Abfrage in C

    Hallo, ein simple Frage:

    Ist das ein gültiges "C" Konstrukt ?

    if (r1 == r2 == r3 == r4) .....

    oder muss ich schreiben:

    if ((r1 == r2) && (r2 == r3) && (r3 == r4)) .....

    Der Compiler meckert zumindestens nicht und es "scheint" zu funktionieren.


    Versuch macht klug, funktioniert nicht immer....

    r1 = 1;
    r2 = 1;
    r3 = 1;
    r4 = 1;
    funktioniert

    r1 = 1;
    r2 = 1;
    r3 = 1;
    r4 = 2;
    funktioniert

    r1 = 1;
    r2 = 1;
    r3 = 2;
    r4 = 1;
    funktioniert

    r1 = 2;
    r2 = 2;
    r3 = 2;
    r4 = 2;
    funktioniert nicht ??????
    hier landet das Programm im Zweig "nicht gleich"

    wenn ich mir den Assembler Code ansehe, wundert mich garnichts mehr...

    Siro
    Geändert von Siro (15.02.2012 um 11:48 Uhr)

  2. #2
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.08.2011
    Ort
    Hannover
    Beiträge
    164
    Moin,

    also das ist eine gültige C-Konstruktion, macht aber nicht das, was Du vorhast. Ich bin mir gerade nicht sicher, ob der Parser von links oder von rechts arbeitet, also angenommen er arbeitet von links, dann ist Deine Abfrage so was wie

    Code:
    if (((r1 == r2) == r3) == r4)
    Also erst wird r1 mit r2 verglichen, dann das Ergebnis (true oder false!!!) mit r3 usw. Aus eigener leidvoller Erfahrung empfehle ich: schreib nie in Umgangssprache, sondern so, wie in Deiner zweiten Zeile.

    BTW: mehr schönen C-Code gibt's hier oder schau in meine Signatur

    viele Grüße
    Andreas
    #define true ('/'/'/')
    #define false ('-'-'-')

  3. #3
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    05.11.2007
    Beiträge
    1.076
    Hallo Andreas,
    ich glaube ich verstehe was Du meinst. Er liefert mir beim ersten Vergleich ein BOOLEAN also TRUE wenn die Werte gleich sind und führt dann weitere Vergleiche mit dieser 1 durch. Das geht dann natürlich in die Hose.
    Aber mal was ganz anderes: Wie kommt es, dass ('/'/'/') tatsächlich 1 ergibt, hab es eben mal ausprobiert ebenso ('-'-'-') Der Compiler macht eine 0 draus.
    Wirklich erstaunlich, muss man das Verstehen ??????
    ('/') ergbit eine 47 hängt also irgendwie mit dem Ascii-Code zusammen....
    Danke Dir für die Info.

    Dann ist also
    ('/') - ('/'/'/') = 46

    Siro
    Geändert von Siro (15.02.2012 um 13:16 Uhr)

  4. #4
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    Aber mal was ganz anderes: Wie kommt es, dass ('/'/'/') tatsächlich 1 ergibt, hab es eben mal ausprobiert ebenso ('-'-'-') Der Compiler macht eine 0 draus.
    Das würde ich auch gerne wissen:

    http://www.google.de/search?q=('/'/'/')
    http://www.google.de/search?q=('-'-'-')
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

  5. #5
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    04.08.2011
    Ort
    Hannover
    Beiträge
    164
    Mega-grins:

    Code:
    '/'/'/'
    ist besser lesbar als
    Code:
    '/'  /  '/'
    und das ist das gleiche wie
    Code:
    47 / 47
    (weil chars auch nur Zahlen sind), also 1, also true. false ist dann ganz ähnlich (in Mathefachliteratur heißt es immer: "der einfache Beweis sei dem Leser überlassen").


    Zitat Zitat von Siro Beitrag anzeigen
    Dann ist also ('/') - ('/'/'/') = 46
    rischtisch



    viele Grüße
    Andreas
    #define true ('/'/'/')
    #define false ('-'-'-')

  6. #6
    Moderator Robotik Visionär Avatar von radbruch
    Registriert seit
    27.12.2006
    Ort
    Stuttgart
    Alter
    61
    Beiträge
    5.799
    Blog-Einträge
    8
    und das ist das gleich wie
    ist ja unfassbar einfach. Ich "stolpere" leider gedanklich immer über "(... also 1, also true." und finde deshalb diese einfachen 1/0-Lösungen nicht. Danke.

    Gruß

    mic

    P.S.: Offensichtlich denke ich nicht mehr, ich google...
    Geändert von radbruch (15.02.2012 um 13:48 Uhr)
    Bild hier  
    Atmel’s products are not intended, authorized, or warranted for use
    as components in applications intended to support or sustain life!

Ähnliche Themen

  1. Mehrfach USB Switch
    Von Basteltisch im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 22.01.2010, 22:15
  2. Mehrfach initialisieren möglich?
    Von Duesentrieb im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 01.11.2007, 09:31
  3. ICP1 an Mega32 mehrfach benutzen möglich ?
    Von Tommy75 im Forum AVR Hardwarethemen
    Antworten: 0
    Letzter Beitrag: 13.10.2007, 11:57
  4. Timer mehrfach / optimal nutzen
    Von DerRuffi im Forum AVR Hardwarethemen
    Antworten: 6
    Letzter Beitrag: 26.10.2006, 08:16
  5. Versorgungspins mehrfach vorhanden
    Von Amri im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 01.08.2005, 18:24

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress