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


von Mike23 (Gast)


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

von Rufus Τ. F. (rufus) Benutzerseite


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

von Andreas Dörr (ADoerr) (Gast)


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

von Mike23 (Gast)


Lesenswert?

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

von Mike23 (Gast)


Lesenswert?

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

von Andreas Dörr (ADoerr) (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.