Forum: Mikrocontroller und Digitale Elektronik if schleife Wo ist das elseif?


von Sven (Gast)


Lesenswert?

Hallo Leute,

hab da mal ne Frage:

Suche ich mich gerade dusselig, oder gibts kein elseif in avr C?
1
if () {...}
2
else {...}

is ja klar.

aber gibts denn kein
1
if () {...}
2
elseif {...} 
3
else {...}

?
mein compiler (Atmel Studio 6) sagt mir dass es das nicht gibt. 
Genausowenig wie elsif, else-if....

würde mich mal interessieren, ob ich nur die synthax falsch schreibe, 
oder ob es das nicht gibt und ich ggf auf case-strukturen umsteigen 
muss.

gruß sven

von Chris (Gast)


Lesenswert?

habs grad probiert.. gibts tatsächlich nciht...

von Winnie (Gast)


Lesenswert?

else if?

von Chris (Gast)


Lesenswert?

obwohls das ja im ANSI C gibt

if( Ausdruck1 )
    Anweisung1;
        else if( Ausdruck2 )
    Anweisung2;
  else if( Ausdruck3 )
    Anweisung3;
  .
  .
  else
    AnweisungN;

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

1. Es gibt keine IF- Schleifen.

2. Probier es doch mal mit "ELSE IF"

von Timo (Gast)


Lesenswert?

mit Leerzeichen:
1
if ()
2
{}
3
else if ()
4
{}

von MaWin (Gast)


Lesenswert?

Vielleiocht liegt das daran, daß es keine if-Schleife gibt.

http://www.if-schleife.de/
http://www.php-faq.de/q-terminologie-if.html

Was nun an elseif so gut sein soll daß man meint es unbedingt zu 
brauchen und an else if so unmöglich sein soll daß man es gar niemals 
nie schreiben will, verschliesst sich und ebenso.

von Chris (Gast)


Lesenswert?

Timo schrieb:
> mit Leerzeichen:
> if ()
> {}
> else if ()
> {}

genau bei dem Konstrukt sagt mir das Studio, dass er "else if" nicht 
kennt... Was is das fürn mist?

von Klaus (Gast)


Lesenswert?

Chris schrieb:
> genau bei dem Konstrukt sagt mir das Studio, dass er "else if" nicht
> kennt... Was is das fürn mist?

1) Das Studio sagt dir gar nicht, sondern der Compiler, hier gcc.

2) Auch der GCC sagt dir nicht, dass er kein "else if" kennt, du hast 
nur die Fehlermeldung nicht verstanden.

3) Auch GCC für AVR spricht ganz normales C.

4) Ihr braucht beide dringend ein C-Buch! Wer noch nichtmal 
if-Anweisungen richtig kann, hat bisher noch nicht mal das schlechteste 
Webtutorial angeschaut.

von Stefan (Gast)


Lesenswert?

>> würde mich mal interessieren, ob ich nur die synthax falsch schreibe,

ja, richtig wäre Syntax.

>> Probier es doch mal mit "ELSE IF"

Shift Taste kaputt?

>> genau bei dem Konstrukt sagt mir das Studio, dass er "else if" nicht
>> kennt... Was is das fürn mist?

.. und wenn Du zwischen die Klammern einfach mal eine Bedingung 
schreibst?

int a = 1 ,b = 2;

if (a == b)
 ;
else if (2*a == b)
 ;
else
 ;

Stefan

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Stefan schrieb:
>>> Probier es doch mal mit "ELSE IF"
>
> Shift Taste kaputt?

Ja, manchmal auch die Shift Taste.. Wenn du wüsstest, wie oft ich mein 
Notebook schon flicken musste....

von bitte löschen (Gast)


Lesenswert?

egbert schrieb im Beitrag #2852369:
> IF-Schleifen und FOR-Abfragen.

Gibt es so etwas bei HTML-Programmierern? :-D

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das sind Synthax-Elemente.

von Thomas K. (muetze1)


Lesenswert?

Es bleiben Syntax-Elemente.

von Sven (Gast)


Lesenswert?

ui was eine illustre Runde!

ich muss ganz ehrlich mal sagen, dass ICH

ELSE IF

anders interprätiere!

IF () {..}
ELSE IF () {}
ELSE {}

als beispiel interprätiere ich so:

IF () {...}
ELSE {
   IF () {}
   ELSE
}

als anderen Programmiersprachen kenne ich das ELSEIF oder ELSIF.

Hab ja nur danach gefragt, versteh nicht, warum man sich immer aufregen 
muss. Nirgendwo steht, dass ich ein C experte bin. Hab doch lediglich 
nach ner möglichkeit gefragt sowas zu machen:

IF
ELSEIF
ELFEIF
ELFEIF
ELSE

mehr wollte ich nicht.

von Peter II (Gast)


Lesenswert?

Sven schrieb:
> als beispiel interprätiere ich so:
>
> IF () {...}
> ELSE {
>    IF () {}
>    ELSE
> }

und wo soll das jetzt der unterschied sein?

von Coder (Gast)


Lesenswert?

Hier wird gerne mal schnell mit der Keule geschwungen.
Allerdings wenn Du es nicht geschafft hast, ein "else if" selbst 
nachzuschlagen, finde ich ehrlich gesagt traurig. Ob du wohl dazu 
tatsächlich nicht fähig warst oder einfach keine Lust hattes, weiss ich 
natürlich nicht und möchte ich Dir nicht unterstellen.

von (prx) A. K. (prx)


Lesenswert?

#define elseif else if

von Sven (Gast)


Lesenswert?

Peter II schrieb:
> und wo soll das jetzt der unterschied sein?

ich hatte glaube ich schon gesagt, dass ich unter ELFE IF was anderes 
verstehe als ELSEIF

wenn nun ELSE IF das gleiche ist wie ELSE { if (...) {...} }
dann hab ichs nun verstanden.

von Hmm (Gast)


Lesenswert?

>wenn nun ELSE IF das gleiche ist wie ELSE { if (...) {...} }
>dann hab ichs nun verstanden.

Das ist nicht das Gleiche.

Die öffnende gechwiffene Klammer leitet einen Block, ein 
"Block-Statement" ein. Das ist nicht dasselbe wie ein Statement, wofür 
"if" ein Beispiel ist.

if (...)
   <statement>
else
   if (...)
      <statement>
   else
      <statement>

ist nur eine andere Schreibweise für

if (...)
   <statement>
else if (...)
     <statement>
   else
      <statement>


Du siehst aber an der Einrückung, dass das zweite if vom else-Zweig des 
ersten abhängt.

Semantisch ist

if (...)
   <statement>
else if (...)
     <statement>
   else
      <statement>

hingegen durchaus genauso zu interpretieren wie das, etwa aus Perl 
bekannte

if (...)
   <statement>
elsif (...)
   <statement>
else
   <statement>

Du siehst aber an der Einrückung, das es sich syntaktisch um ein anderes 
Konstrukt handelt.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Mir gefällt das Wort "interprätiere"... ;-)
Und "geschwiffene" auch.


if
elseif
elseif
elseif
...

ist funktional genau das selbe wie

if
else if
       else if
              else if
                      ...

und wenn man das ein wenig anders formatiert, dann sieht das auch gleich 
aus:

if
else if
else if
else if
...

von Shen Long (Gast)


Lesenswert?

Ab einer bestimmten Menge an else if auf die gleiche Variable empfehle 
ich gerne switch-case.
switch ( var )
{
case 1:
   mode_1();
case 2:
   mode_2();
case 3:
   mode_3();
default:
   mode_0();
}

von Hmm (Gast)


Lesenswert?

>Ab einer bestimmten Menge an else if auf die gleiche Variable empfehle
>ich gerne switch-case.

So? Und wer will das wissen?
Das Thema hier ist ein ganz anderes.

von Shen Long (Gast)


Lesenswert?

Vielen Dank für den freundlichen Hinweiß.
Allerdings dachte ich in so einer Situation daran das solch eine 
Konstruktion auch mal für die Variante "taste eine Variable auf mehrere 
Möglichkeiten ab um entsprechend anders zu verfahren" verwendet wird... 
auch wenn das unschön wird.

von Thomas E. (thomase)


Lesenswert?

Shen Long schrieb:
> Allerdings dachte ich in so einer Situation daran das solch eine
> Konstruktion auch mal für die Variante "taste eine Variable auf mehrere
> Möglichkeiten ab um entsprechend anders zu verfahren" verwendet wird...
> auch wenn das unschön wird.
Wenn nicht die Hälfte fehlen würde.

mfg.

von Oliver (Gast)


Lesenswert?

@Shen Long

In Deinem switch Beispiel fehlen die break Statements. So, wie Du das 
geschrieben hast, werden bei var==1 alle 4 mode_n() Aufrufe 
durchgeführt.

von GanzSchlauer (Gast)


Lesenswert?

Hier ein Beispiel für eine if-Schleife:
1
main()
2
{
3
  int i = 0;
4
5
  loop:
6
    if(i < 10)
7
    {
8
      printf("%d\n", i);
9
      i++;
10
      goto loop;
11
    }
12
}

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Thomas K. schrieb:
> Es bleiben Syntax-Elemente.

Ach was. Ich zitierte nur den TO.

von 100.000.000AH (Gast)


Lesenswert?

Chris schrieb:
> obwohls das ja im ANSI C gibt
>
> if( Ausdruck1 )
>     Anweisung1;
>         else if( Ausdruck2 )
>     Anweisung2;
>   else if( Ausdruck3 )
>     Anweisung3;
>   .
>   .
>   else
>     AnweisungN;

Unsinn. Das ist keine "elsif"-Anweisung, sondern 2 Anweisungen. Ein 
"else" und eine "if"-Anweisung.
Aber das ist ja wohl genau das, wonach der TO sucht.

Das der Begriff "if-Schleifen" Bullshit ist, wurde ja schon gesagt.

von Sven (Gast)


Lesenswert?

ok ich denke das thema is durch...

   o0

von 100.000.000AH (Gast)


Lesenswert?

Chris schrieb:
> genau bei dem Konstrukt sagt mir das Studio, dass er "else if" nicht
> kennt... Was is das fürn mist?

Wie wär es, die Fehlermeldung zu posten. Was du behauptest kann 
eigentlich gar nicht sein.
Oder hast du deinen Compiler gepatched?

von Hmm (Gast)


Lesenswert?

Moooment: Ich muss Lothar noch sagen, das die "geschwiffene" Klammern 
tatsächlich "geschwofte" sind.

von 100.000.000AH (Gast)


Lesenswert?

Shen Long schrieb:
> default:
>    mode_0();

Diese Empfehlung würde ich nicht unterschreiben.
Der "default-Zweig" sollte in gutem Code immer einem Fehlerfall 
vorbehalten sein.

von 100.000.000AH (Gast)


Lesenswert?

Hmm schrieb:
> geschwofte

Wow, jetzt kommen wir aber schon sehr nahe an "Geschwaffel" ;-)

von 100.000.000AH (Gast)


Lesenswert?

GanzSchlauer schrieb:
> Hier ein Beispiel für eine if-Schleife:
> main()
> {
>   int i = 0;
>
>   loop:
>     if(i < 10)
>     {
>       printf("%d\n", i);
>       i++;
>       goto loop;
>     }
> }

Ganz schlau, aber nicht schlau genug!

Die Schleife wird gebildet durch das "goto" und das Label "loop".
Die "if-Anweisung" ist nur Teil des Blocks innerhalb der Schleife.

von Switch-Spezialist (Gast)


Lesenswert?

Shen Long schrieb:
> Ab einer bestimmten Menge an else if auf die gleiche Variable empfehle
> ich gerne switch-case.
> switch ( var )
> {
> case 1:
>    mode_1();
> case 2:
>    mode_2();
> case 3:
>    mode_3();
> default:
>    mode_0();
> }

Vorsicht! "break;" nicht vergessen!

von Hmm (Gast)


Lesenswert?

"Geschwaffel"? Der ist lustig. :-)

von Rrolf Magnus (Gast)


Lesenswert?

Sven schrieb:
> Peter II schrieb:
>> und wo soll das jetzt der unterschied sein?
>
> ich hatte glaube ich schon gesagt, dass ich unter ELFE IF was anderes
> verstehe als ELSEIF

Ja, aber du hast nicht dazugeschrieben, was du denn nun darunter 
verstehst.

Hmm schrieb:
> Moooment: Ich muss Lothar noch sagen, das die "geschwiffene" Klammern
> tatsächlich "geschwofte" sind.

Das sieht die Gesellschaft zur Stärkung der Verben aber anders. ;-)
Siehe http://verben.texttheater.net/Starke_Verben/S

100.00.000AH schrieb:
> Der "default-Zweig" sollte in gutem Code immer einem Fehlerfall
> vorbehalten sein.

So eine Empfehlung habe ich noch nie gehört. Ich wüßte auch nicht, wozu 
sie gut sein soll.

von Thomas E. (thomase)


Lesenswert?

Rrolf Magnus schrieb:
> So eine Empfehlung habe ich noch nie gehört. Ich wüßte auch nicht, wozu
> sie gut sein soll.
Er hält seine fehlerhaften Programme halt für guten Code.

mfg.

von Stefanie B. (sbs)


Lesenswert?

Mathematiker lassen ja ganz gerne Werte im limes gegen 0 laufen:
1
#define limes while
2
limes (value --> 0) {
3
  // do something
4
}

von Hmm (Gast)


Lesenswert?

>Hmm schrieb:
>> Moooment: Ich muss Lothar noch sagen, das die "geschwiffene" Klammern
>> tatsächlich "geschwofte" sind.

>Das sieht die Gesellschaft zur Stärkung der Verben aber anders. ;-)
>Siehe http://verben.texttheater.net/Starke_Verben/S

Uups. Sorry. Geschwiffen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Ich hoffe, dass sich Neuhochdeutsch in absehbarer Zeit nicht etablieren 
kann, und mache bis derweil noch weiterhin geschweifte Klammern.

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.