if schleife Wo ist das elseif?

Gast #2852329
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
Gast #2852352
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.
Gast #2852356
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
Gast #2852440
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.
Gast #2852456
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.
Gast #2852474
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.
Gast #2852498
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.
Gast #2852546
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.
Gast #2852571
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.
Gast #2852658
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren