Forum: PC-Programmierung Switch case Anweisung


von Marie B. (marie93)


Lesenswert?

Hallo Friendzzz,

mal eine Frage:
Wird in diesem Fall auch die case Anweisung abgebrochen, auch wenn das 
"break" in der if-Anweisung steht? Oder geht das gar nicht, oder wird 
die If-Anweisung abgebrochen?

  switch(modus)
    {
    case 0 :
      If (a=3)
                        {
           break;
                        }
                        c=3;


usw.


Danke ....
Eure Marie93

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Eine "if-Anweisung" kann nicht abgebrochen werden, daher bezieht sich 
das break hier auf das case-Label.

Deine Quellcodeformatierung (Einrückung) ist grässlich.

von Öpf (Gast)


Lesenswert?

Ja. "Break" verlässt das nächstgelegene äussere do, for, switch oder 
while.
(Nicht case, was ja sinngemäß hiesse das der default Fall abgearbeitet 
würde).

von yalu (Gast)


Lesenswert?

> Deine Quellcodeformatierung (Einrückung) ist grässlich.

Er hat zum Einrücken teilweise Leerzeichen und teilweise Tabs verwendet
und die Tablänge im Editor auf 2 eingestellt. Die Forensoftware wandelt
aber offensichtlich 1 Tab in 8 Leerzeichen um.

Deswegen: Wenn man schon Tabs zum Einrücken benutzt, sollte man dies
konsequent in jeder Zeile so machen.

Weniger Probleme hat man aber, wenn man auf Tabs im Quellcode komplett
verzichtet und stattdessen Leerzeichen verwendet. Leerzeichen sehen im
Gegensatz zu Tabs in jedem Betriebssystem, in jedem Editor, in jedem
Browser und auf jedem Drucker gleich aus.

Die meisten Editoren und IDEs können so konfiguriert werden, dass ein
Tab direkt bei der Eingabe in die gewünschte Anzahl von Leerzeichen
umgesetzt wird, so dass man auch keine Komforteinbußen bei der Eingabe
hat.

von D. I. (Gast)


Lesenswert?

yalu schrieb:
>
> Weniger Probleme hat man aber, wenn man auf Tabs im Quellcode komplett
> verzichtet und stattdessen Leerzeichen verwendet. Leerzeichen sehen im
> Gegensatz zu Tabs in jedem Betriebssystem, in jedem Editor, in jedem
> Browser und auf jedem Drucker gleich aus.
>
> Die meisten Editoren und IDEs können so konfiguriert werden, dass ein
> Tab direkt bei der Eingabe in die gewünschte Anzahl von Leerzeichen
> umgesetzt wird, so dass man auch keine Komforteinbußen bei der Eingabe
> hat.

Meine Meinung. Bin ja mal gespannt wie lang es zur Tabs vs. Leerzeichen 
Diskussion dauert :)

von Patrick B. (p51d)


Lesenswert?

Rufus t. Firefly schrieb:
> Eine "if-Anweisung" kann nicht abgebrochen werden, daher bezieht sich
> das break hier auf das case-Label.


anstelle eines breaks könnte man continue verwenden, diese beendet die 
momentane Schleife und fährt am am Schluss der Schleife weiter...

Das Beispiel hab ich aus einem Buch:
[c]
int main (){
  int loop = 1;
  do{
    if(!(loop%10))
      continue;
    printf("%lf\n",pow(loop,2);
    loop ++;
  }while(loop <= 100);
return 0;
}
[c/]

von Arc N. (arc)


Lesenswert?

Patrick B. schrieb:
> Das Beispiel hab ich aus einem Buch:
> [c]
> int main (){
>   int loop = 1;
>   do{
>     if(!(loop%10))
>       continue;
>     printf("%lf\n",pow(loop,2);
>     loop ++;
>   }while(loop <= 100);
> return 0;
> }
> [c/]

Dann würde ich das Buch wegwerfen...
Was passiert wohl, wenn loop == 10 ist (SCNR).

von Patrick B. (p51d)


Lesenswert?

ups,
zitieren soll gelehrnt sein...

> Der Fehler liegt hier darin, dass durch die "continue"-Anweisung auch die
> Reinitialisierung der Schleifenvariablen übersprungen wird und sich daher
> nach dem ersten Auftreten der "continue"-Anweisung an dem Wert der
> Schleifenvariablen und der Auswertung der Schleifenbedingung nichts
> mehr ändert.

Schleifen abbrechen:
"continue"    Beendet die aktuelle Schleifeniternation
"break"       Beendet die ganze Schleife (nicht für reguläres Verlassen)
"return"      Beendet nicht nur die Schleife, in der die Anweisung 
aufgerufen
              wird, sondern die ganze Funktion
"exit(int)"   Beendet das Programm

Arc Net schrieb:
> (SCNR).
NVM

von Klaus W. (mfgkw)


Lesenswert?

Patrick B. schrieb:
> ...
> Schleifen abbrechen:
> "continue"    Beendet die aktuelle Schleifeniternation
> "break"       Beendet die ganze Schleife (nicht für reguläres Verlassen)

... oder das aktuelle switch, je nachdem wo es steht.

> "return"      Beendet nicht nur die Schleife, in der die Anweisung
> aufgerufen

auch ohne Schleife

>               wird, sondern die ganze Funktion
> "exit(int)"   Beendet das Programm

... , lässt aber vorher alle mit atexit() installierten Funktionen
ausführen, offene Dateien schließen etc..

abort() beendet ein Programm dagegen umgehend ohne Firlefanz.

> ...

von Sven P. (Gast)


Lesenswert?

Patrick B. schrieb:
> ups,
> zitieren soll gelehrnt sein...
>
>> Der Fehler liegt hier darin, dass durch die "continue"-Anweisung auch die
>> Reinitialisierung der Schleifenvariablen übersprungen wird und sich daher
>> nach dem ersten Auftreten der "continue"-Anweisung an dem Wert der
>> Schleifenvariablen und der Auswertung der Schleifenbedingung nichts
>> mehr ändert.

Da sollte man aber vorsichtig mit sein. Hier im Beispil ist das korrekt, 
bei einer for-Schleife aber wird durch continue keineswegs die 
Reinitialisierung übersprungen...

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.