www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Die IF abfrage die nicht so macht wie sie soll....


Autor: Mike23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ch stehe vor einem rätsel...wenn ihr euch den code anseht erkennt ihr
dass abgefragt wird ob A positiv ist und wenn ja soll er abfragen ob B
positiv ist, das erstere schafft er auch auch noch nur beim zweiten,
springt er einfahc aus dem unterprogramm raus...
hat jemand eine ahnung weiso
also ich habe
A mit 500 definiert und B mit 200 um sicher zu gehen dass beide positiv
sind
source:
int auswertung(C,h,a,b,L){
if((a>=0))
{
if((b>=0))
{
if((L >= 95)) return 0x31; //WEIß
if((h <= 41)) {if((C<=15)) return 0x42; //Braun
if((h <= 10 && L>=78)) return 0x35; //ROSA
return 0x34; //ROT
}
if(h <61 ) {
if(C<31) return 0x42; //Braun
return 0x33; //Orange
}
if(h <90 ) {
if(C<20) return 0x42; //Braun
return 0x32; //Gelb
}
}
}
else if........................ .....................

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welchen Datentyp haben C, h, a, b und L?

Sollte das "unsigned int" sein, sind alle Vergleiche >= 0 ziemlich
albern.

Was spricht dagegen, den Quelltext zu formatieren und von völlig
unnötigen Klammern zu befreien?

Das würde das Lesen erleichtern ...

Autor: Andreas Dörr (ADoerr) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo, beim ausklabustern mußte man genau gucken, wo noch Verschachtelungen
sind.

Falls b vom Typ char ist, dann ist klar, warum das schiefläuft,
andernfalls wär's erstmal unerklärlich für mich.
Der Typ char, wird mit Vorzeichen interpretiert und hat daher nur einen
Wertebereich von -128 bis 127. Da passen deine 200 nicht mehr hinein und
werden als -57 interpretiert. Änder dann einfach mal den Typ in (signed)
int.

Rufus: Wäre wirklich albern, wenn das unsigned int wäre, aber dann
dürfte die zweite IF-Anweisung mit seinem Testwert 200 nicht
schieflaufen.

Bis denne, Andreas

Autor: Mike23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es sind alle vom typ int (nicht unsigned...dass is mir schon klar dass
dass nicht funktionieren würde

Autor: Mike23 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich verwende einen C compiler für die 18er serie der frima hi-tec(pic
18f252)

Autor: Andreas Dörr (ADoerr) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm ...

Sicher das er in das zweite if nicht reinspringt? Woran hast Du das
gesehen (Debugger?), denn deine Funktion liefert in dem Fall keinen
definierten Wert zurück.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.