Ich möchte es gern verstehen

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
Kay
Beiträge: 6
Registriert: Di Dez 15, 2015 5:13 pm

Ich möchte es gern verstehen

Beitrag von Kay » Di Dez 15, 2015 5:34 pm

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;
}


nouseforname
Beiträge: 236
Registriert: Do Feb 10, 2011 6:31 pm

Re: Ich möchte es gern verstehen

Beitrag von nouseforname » Di Dez 15, 2015 6:19 pm

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.

Kay
Beiträge: 6
Registriert: Di Dez 15, 2015 5:13 pm

Re: Ich möchte es gern verstehen

Beitrag von Kay » Mi Dez 16, 2015 7:23 am

Danke für die schnelle Antwort. Ich werde damit ein paar Sachen probieren. Es war mit Sicherheit nicht die letzte Frage.
Kay

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8859
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

Re: Ich möchte es gern verstehen

Beitrag von Xin » Mi Dez 16, 2015 12:11 pm

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!?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Antworten