mikrocontroller.net

Forum: PC-Programmierung Switch case Anweisung


Autor: Marie Berger (marie93)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Öpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: D. I. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht 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/]

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Patrick B. (p51d)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Klaus Wachtler (mfgkw)
Datum:

Bewertung
0 lesenswert
nicht 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.

> ...

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.