Schleifenproblem



  • Hallo Miteinander,

    ich habe ein Schleifenproblem (eigentlich recht simpel) komme aber nicht zum erqwünschten Ergebnis!

    Es folgt die Quelldatei:
    Der Kommentar im Quelltext erklärt euch was ich denn ursprünglich vorhatte, aber wenn ich das Programm kompiliere und ausführe, schreibt er einfach 10 mal "Geben Sie eine Zahl ein, mit 99 verlassen"

    #include <stdio.h>

    /* Erlaubt die Benutzereingabe von bis zu 10 Integer-Werten */
    /* Die Werte werden in einem Array namens wert gespeichert. */
    /* Wenn 99 eingegeben wird, stoppt die Schleife */
    int wert[10];
    int a, b=0;

    int main ()
    {
    for (a = 0; a < 10 && b != 99; a++)

    printf("Geben Sie eine Zahl ein, mit 99 verlassen ");
    scanf("%d", &b);
    wert[a] = b;
    return 0;

    }

    Danke im voraus



  • Da fehlen die {} Dinger hier ^^

    #include <stdio.h>
    
    /* Erlaubt die Benutzereingabe von bis zu 10 Integer-Werten */
    /* Die Werte werden in einem Array namens wert gespeichert. */
    /* Wenn 99 eingegeben wird, stoppt die Schleife */
    int wert[10];
    int a, b=0;
    
    int main ()
    {
      for (a = 0; a < 10 && b != 99; a++)
      { /* <------------------- hat gefehlt */
        printf("Geben Sie eine Zahl ein, mit 99 verlassen ");
        scanf("%d", &b);
        wert[a] = b;
        return 0;
      }; /* <------------------ hat gefehlt */
    };
    

    mFg



  • Argl, das return darf natürlich nicht in der schleife sein - mein fehler 😛

    #include <stdio.h>
    
    /* Erlaubt die Benutzereingabe von bis zu 10 Integer-Werten */
    /* Die Werte werden in einem Array namens wert gespeichert. */
    /* Wenn 99 eingegeben wird, stoppt die Schleife */
    int wert[10];
    int a, b=0;
    
    int main ()
    {
      for (a = 0; a < 10 && b != 99; a++)
      { /* <------------------- hat gefehlt */
        printf("Geben Sie eine Zahl ein, mit 99 verlassen ");
        scanf("%d", &b);
        wert[a] = b;
      }; /* <------------------ hat gefehlt */
      return 0;
    };
    


  • Hinter } kommen keine ;



  • feigling schrieb:

    Hinter } kommen keine ;

    Na klar doch: Wenn KörperKlaus unbedingt ein paar Leeranweisungen
    in sein Programm einbauen will, dann laß ihn doch... 😃



  • Javaner schrieb:

    feigling schrieb:

    Hinter } kommen keine ;

    Na klar doch: Wenn KörperKlaus unbedingt ein paar Leeranweisungen
    in sein Programm einbauen will, dann laß ihn doch... 😃

    Leeranweisungen? 😮
    Davon höre ich zum ersten mal - klär mich mal bitte darüber auf.



  • ist eine Leeranweisung

    ;;;
    

    ist eine Sequenz von Anweisungen bestehend aus 3 (4) Leeranweisungen.

    Diese wurden damals von Niklaus Wirth in Pascal eingeführt, weil die
    Vorgängersprache Algol (68) keine Leeranweisungen kannte und deshalb
    Konstrukte wie

    if (a=42) then begin
      x := 1;
      y := 2; // <--- dieses Semikolon trennt KEINE Anweisungen
    end
    

    vom Compiler als fehlerhaft zurückgewiesen wurden, da damals
    das ; nur als Trennung zwischen Anweisungen erlaubt war.

    Anders gesagt: Die Einführung der Leeranweisung war eine
    Reminiszenz an den faulen Programmierer. 😃

    In C wurde dann kurzerhand definiert, daß jede Anweisung
    (außer der Verbundanweisung "{...}") mit einem Semikolon abgeschlossen
    werden muß.

    Jetzt klarer? 🕶



  • Javaner schrieb:

    Anders gesagt: Die Einführung der Leeranweisung war eine Reminiszenz an den faulen Programmierer. 😃

    Nochmals nachgefragt - an den denkfaulen oder den tippfaulen Programmierer? 😉
    Denn das ";" vor dem end wäre ja lt. ALGOL nicht zulässig gewesen (richtig?), damit hätte das ";" in der Zeile darüber eine andere Wertigkeit. Irgendwo hab' ich aber definitiv noch ein Pascal, das keine ";" vor dem end mag ... *grübel* 🙄



  • pointercrash() schrieb:

    Nochmals nachgefragt - an den denkfaulen oder den tippfaulen Programmierer? 😉

    An den denkfaulen Programmierer, der immer ein ; ans Ende einer Anweisung
    geschrieben hat.

    pointercrash() schrieb:

    Denn das ";" vor dem end wäre ja lt. ALGOL nicht zulässig gewesen (richtig?)

    Genau!

    pointercrash() schrieb:

    Irgendwo hab' ich aber definitiv noch ein Pascal, das keine ";" vor dem end mag ... *grübel* 🙄

    Auch richtig! Das Ur-Pascal erlaubte das auch nicht. Aber die folgenden,
    und heute vorherrschenden Pascal-Implementationen, haben deswegen die sogenannte
    Leeranweisung in die Sprachdefinition mit aufgenommen

    Siehe: http://www.be-ol.de/html/verbund-anweisung.html
    (Abschnitt: "Anmerkung")

    Google doch einfach mal nach: pascal leeranweisung 😉



  • Noch ein Hinweis:

    http://wwwmatthes.in.tum.de/file/Lehrstuhl/Mitarbeiter/matthes/C64_C128/Buch-C128-HTML/2_8_1_3.htm

    Zitat:

    Noch ein Wort zu den Semikola: Ein Semikolon trennt Anweisungen. Deshalb ist kein Semikolon vor dem abschließenden END erforderlich. Setzen Sie auch dort ein Semikolon,

    BEGIN
      READLN(A, B);
      A:= SQRT(A*A + B*B);
      WRITELN('BETRAG =', A);
    END
    

    so erwartet der Compiler eine Anweisung. Um diesen Fall nicht als Fehler zu behandeln, gibt es in Pascal die Leeranweisung, die aus keinem Befehl besteht.


Anmelden zum Antworten