Forum: Mikrocontroller und Digitale Elektronik if - else Frage


von Der-Ex-Bundesschnäppchenjäger (Gast)


Lesenswert?

Hallo,

prinzipiell ist mir das if-else Kontrukt schon klar. Nur was passiert 
bei folgenden Anweisungen:


if(irgendwas)
 {
   tu was;
 }

if(was anderes)
 {
   tu was anderes;
 }

else
 {
   mach ganz was anderes;
 }


Würde sich das else nun nur auf das darüberliegende if auswirken, und 
die erste if-Anweisung einfach prüfend immer durchlaufen werden ?

Also wie verhält es sich quasi wenn ich nciht if - elseif - else sonder

if - if - if - else mache ?


Vielen Dank für eure Hilfe
Christian

von bitte löschen (Gast)


Lesenswert?

Das else bezieht sich immer auf das letzte if. Um der besseren 
Lesbarkeit willen arbeitet man mit Klammerung, auch wenn es nicht immer 
nötig wäre.

Aus
if - if - if - else
wird
if { if { if {} else {}}}

von Tim R. (herrvorragend)


Lesenswert?

so wie in deinem beispiel bezieht sich das else auf die letzte if 
abfrage.  ansonsten kommt es auf die klemmerung der verzweigungen an


>Aus
>if - if - if - else
>wird
>if { if { if {} else {}}}

ist nicht korrekt. da die verzweigungen alle beinhalten, dass die vorige 
bedingung erfüllt ist. hier liegt jedoch eine mehrfachverzweigung vor, 
konkret würde man das mit SWITCH lösen

von Der-Ex-Bundesschnäppchenjäger (Gast)


Lesenswert?

Vielen Dank,

es ist der Hammer wie schnell man hier immer Antworten kriegt.

Gruß
Christian

von Ingo (Gast)


Lesenswert?

Der-Ex-Bundesschnäppchenjäger schrieb:
> Würde sich das else nun nur auf das darüberliegende if auswirken, und
> die erste if-Anweisung einfach prüfend immer durchlaufen werden ?
So ist es. Es sei denn du setzt deine Klemmern anderst und 
verschachtelst es weiter.

von Der-Ex-Bundesschnäppchenjäger (Gast)


Lesenswert?

Aha, nochmal ein Edit.

Es bleibt aber trotzdem dabei, daß (ohne Klammerung) sich das else auf 
das jeweils letzte if bezieht ?

von Noname (Gast)


Lesenswert?

Verstehe mich bitte recht.
Das sind absolute Grundlagen die man in jedem C-Buch nachlesen kann. 
Schau bitte dort nach. Und wenn Du da etwas nicht verstehst, erklären 
wir es Dir gerne. Aber wir sind hier keine Vorleser. OK? :-)

von Der-Ex-Bundesschnäppchenjäger (Gast)


Lesenswert?

Noname schrieb:
> Verstehe mich bitte recht.
> Das sind absolute Grundlagen die man in jedem C-Buch nachlesen kann.
> Schau bitte dort nach. Und wenn Du da etwas nicht verstehst, erklären
> wir es Dir gerne. Aber wir sind hier keine Vorleser. OK? :-)


Ich werde sicher nicht den Noname vorher fragen wo und wann ich im 
Internet was fragen werde. OK? :-)

von Ingo (Gast)


Lesenswert?

Der-Ex-Bundesschnäppchenjäger schrieb:
> Es bleibt aber trotzdem dabei, daß (ohne Klammerung) sich das else auf
> das jeweils letzte if bezieht ?
Abhängig der Klammern:
1
if (eins)
2
{
3
  if(zwei)
4
 {
5
  if (drei)
6
   {
7
   }
8
 }
9
 else
10
 {
11
 }
12
}
hier bezieht sich das else auf das zweite if.

Noname schrieb:
> Das sind absolute Grundlagen die man in jedem C-Buch nachlesen kann.
> Schau bitte dort nach. Und wenn Du da etwas nicht verstehst, erklären
> wir es Dir gerne. Aber wir sind hier keine Vorleser. OK? :-)
Nun stell dich mal nicht so an... Die zwei Zeilen werden dich nicht 
umbringen bzw. musst du ja nichts dazu sagen...



Ingo

von Noname (Gast)


Lesenswert?

>Ich werde sicher nicht den Noname vorher fragen wo und wann ich im
>Internet was fragen werde. OK? :-)

Das sollst Du sicher nicht. Du bist etwas empfindlicher. OK. Tut mir 
leid.

Was ich Dir sagen wollte: Wir helfen Dir gerne Probleme zu lösen. Aber 
Grundlagen die Du Dir selbst erfragen kannst, lies bitte selbst nach. Es 
ist unbefriedigen Dir solche Trivialinformationen zu vorzulesen, wenn Du 
sie Dir selbst verschaffen kannst.

Das ist alles und war durchaus freundlich gemeint. OK? :-)

von Der-Ex-Bundesschnäppchenjäger (Gast)


Lesenswert?

Wie mein Vorredner schon gesagt hat. Wenn dich das hier stört, dann 
schau Dir halt z.B. die Bundespräsidentenwahl an und hör auf dich über 
Fragen anderer Leute aufzuregen. Schade um die Bytes, ehrlich. OK? :-)

Keiner zwingt einen im Internet auf Fragen anderer irgendetwas zu 
schreiben, geschweige denn die Fragen überhaupt zu lesen. Genieße die 
Freiheit einfach andere zu ignorieren. Gegen die Leute, die ich einfach 
allergisch bin, sind diejenigen die mit dem virtuellen Zeigefinger durch 
die Foren wischen. Die braucht kein Mensch. Genieß das schöne Wetter.

von Ingo (Gast)


Lesenswert?

Der-Ex-Bundesschnäppchenjäger schrieb:
> Genieß das schöne Wetter.
Also bei mir lascht es wie verrückt...

von Noname (Gast)


Lesenswert?

Es geht nicht darum, das Du mich störst. Du bist mir egal. Warum Du 
vermutest das ich mich wegen Dir aufrege, weisst Du besser als ich.

Aber Du wirst langfristig besser fahren, wenn Du selbst Dich um Wissen 
bemühst. Da Du das in diesem noch sehr simplen Fall nicht getan hast, 
schien mir ein Ratschlag angemessen.

Nun. Es ist offensichtlich das mein Rat von Dir nicht gewünscht wird.

Also: Viel Erfolg noch.

von hp-freund (Gast)


Lesenswert?

Für derartige Probleme ist ein einfacher Test das Sinnvollste.
Gerade bei Verschachtelungen wenn es (später) unübersichtlicher wird.

Dabei war dein Progamm schon fast fertig.
1
#include "stdio.h"
2
3
#define TRUE  1
4
#define FALSE 0
5
6
int main(void)
7
{
8
  int irgendwas=TRUE;
9
  int was_anderes=FALSE;
10
11
  printf("IF Test:\n");
12
  
13
if(irgendwas)
14
 {
15
   printf("tu was\n");
16
 }
17
18
if(was_anderes)
19
 {
20
   printf("tu was anderes\n");
21
 }
22
else
23
 {
24
   printf("mach ganz was anderes\n");
25
 }
26
  
27
  return 0;
28
}

von Lehrmann M. (ubimbo)


Lesenswert?

Philipp Klostermann schrieb:
> Das else bezieht sich immer auf das letzte if. Um der besseren
> Lesbarkeit willen arbeitet man mit Klammerung, auch wenn es nicht immer
> nötig wäre.
>
> Aus
> if - if - if - else
> wird
> if { if { if {} else {}}}

Das ist natürlich HUMBUG !!!

Grundsätzlich bezeichnen {} immer einen Anweisungsblock. In den wird 
natürlich nur gesprungen, wenn die Bedingung erfüllt ist. Es ist ein 
massiver Unterschied zwischen

if(x){tue A;}
if(y){tue B;}
else {tue C;}

und

if(...){
 tue A;
 if(...){tue B}
 else {tue C;}
}




Das else bezieht sich immer auf das letzte native "if".
Die meisten Programmierer arbeiten ohne "else if" und nur mit "else" und 
"if".

von bitte löschen (Gast)


Lesenswert?

Lehrmann Michael schrieb:
> Das ist natürlich HUMBUG !!!

Um es nicht nur für den Einsteiger verständlich, sondern auch für den 
Akademiker halbwegs korrekt zu machen, füge ich noch in Prosa die 
Einschränkung hinzu, die sich eigentlich von selbst ergibt, wobei ich 
zugunsten der allgemeinen Verständlichkeit auf den Begriff "nativ" 
verzichte:

Das else bezieht sich immer auf das letzte mögliche if.

Dass Du auch meinen zweiten Satz mit in das mit "HUMBUG" kommentierte 
Zitat mit aufgenommen hast, führe ich mal darauf zurück, dass wir die 
recht unpräzise Angabe "if - if - if - else" unterschiedlich 
interpretiert haben.
Ich habe das als "if(x) if(y) if(z) blah; else blubb;" interpretiert, 
und ich schätze mal, Du hast es als "if(x) blubber; if(y) hurz; if(x) 
blah; else blubb;" interpretiert.
Die Bedeutung von {} dürfte uns beiden hinlänglich bekannt sein, ebenso 
die Praxis, zur besseren Lesbarkeit bei if, while, do und for auch 
einzelne Anweisungen als Anweisungsblöcke zu kodieren.

Unterschiedlicher Auffassung scheinen wir nur bezüglich der Position der 
öffnenden "{" zu sein. Ich mache es halt gerne in die nächste Zeile 
unter das "if", Du machst es (anscheinend) gerne rechts daneben. Beide 
Stile haben ihre Anhänger, es bleibt eine Glaubensfrage.

Schönen Restsonntag!

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.