Seite 1 von 1

Ich möchte es gern verstehen

Verfasst: Di Dez 15, 2015 5:34 pm
von Kay
Ich stehe noch ganz am Anfang von C. Aber ich möchte gerne verstehen warum etwas funktioniert wie es funktioniert. Ich habe null Vorkentnisse (auser in den `80ern ein wenig C64 BASIC (Ja, nicht lachen das war als man noch eine 19 vor die Jahreszahl geschrieben hat.))

Ich habe eine Übung geschrieben die einer der Vorgaben sehr ähnlich ist. Das Programm soll bis 100 zählen und bei 50 die Halbzeit makieren. Es soll dann die Schleife bei 99 abbrechen.

Warum funktioniert es mit !=50 und nicht mit == 50 und warum läuft es nur richtig wenn ich die break Anweisung vor die continue Anweisung stelle?
(Anfängerfragen sind keine dummen Fragen) :oops:

Danke Kay

Code: Alles auswählen

#include <stdio.h>

int main(void)
{
  int wert;
  for( wert = 1; wert <= 100; wert = wert +1)
  {
    printf("Ich zähle vorwärts '%d'\n", wert);

    if(wert == 99)
      break;

    if(wert != 50)
      continue;

    printf("\nHalbzeit\n\n");

  }

return 0;
}


Re: Ich möchte es gern verstehen

Verfasst: Di Dez 15, 2015 6:19 pm
von nouseforname
Hallo Kay,

willkommen hier im Forum.

Ist es Absicht dass deine Schleife bis inklusive 100 zählen soll? Wahrscheinlich um Deinen gewollten Abbruch zu testen?!

Ich denke Dein Problem liegt im Verständnis von "break" und "continue". Du möchtest bei 99 abbrechen und bei 50 eine zusätzliche Ausgabe erzeugen.

"continue" springt ab dem Aufruf wieder zum Schleifenkopf. Deine zusätzliche Ausgabe befindet sich dahinter, also musst Du bei allen Werten ungleich 50 an der Ausgabe vorbei und zurück zum Anfang springen. "==" würde hier nur beim Wert 50 die Ausgabe überspringen.

Dieser Sprung ist die Erklärung warum die "break"-Anweisung vor dem "continue" stehen muss. Anders herum würdest Du niemals die "break"-Bedingung erreichen.

Wenn Du Deinen Code anders gestaltest wird es eventuell verständlicher vom Ablauf:

Code: Alles auswählen

    #include <stdio.h>

    int main(void)
    {
      for(int wert = 1; wert <= 100; wert++)
      {
        printf("Ich zähle vorwärts '%d'\n", wert);

        if (wert == 50)
        {       
            printf("\nHalbzeit\n\n");
        }

        if(wert == 99)
          break;
      }

    return 0;
    }
Dann fehlt natürlich das "continue", aber es ist klarer was Du erreichen willst weil leichter lesbar.

Re: Ich möchte es gern verstehen

Verfasst: Mi Dez 16, 2015 7:23 am
von Kay
Danke für die schnelle Antwort. Ich werde damit ein paar Sachen probieren. Es war mit Sicherheit nicht die letzte Frage.
Kay

Re: Ich möchte es gern verstehen

Verfasst: Mi Dez 16, 2015 12:11 pm
von Xin
Moin Kay,
Kay hat geschrieben:Ich stehe noch ganz am Anfang von C. Aber ich möchte gerne verstehen warum etwas funktioniert wie es funktioniert. Ich habe null Vorkentnisse (auser in den `80ern ein wenig C64 BASIC (Ja, nicht lachen das war als man noch eine 19 vor die Jahreszahl geschrieben hat.))
Damit habe ich '86 auch angefangen. 1986. ;)
Kay hat geschrieben:Ich habe eine Übung geschrieben die einer der Vorgaben sehr ähnlich ist. Das Programm soll bis 100 zählen und bei 50 die Halbzeit makieren. Es soll dann die Schleife bei 99 abbrechen.

Warum funktioniert es mit !=50 und nicht mit == 50 und warum läuft es nur richtig wenn ich die break Anweisung vor die continue Anweisung stelle?
Wie nouseforname schon schrieb: Der Computer sucht sich nicht die (von Dir) gewünschte Lösung raus, sondern geht schritt für Schritt vor. 99 ist != 50, also continue. Er erreicht die Abfrage auf 99 also nicht mehr und springt an den Anfang der Schleife zurück.


Ich sehe in Deinem Quelltext keinen Fehler. Der sollte eigentlich so laufen!?