Hilfe! for-schleife funktioniert nicht (Hausaufgabe)



  • Hallo, Ich bin ganz neu hier und habe auch erst vor 5 Wochen mit dem programmieren begonnen (bin Studentin).
    Jetzt haben wir diese Hausaufgabe bekommen:

    Aufgabe 2 (Beseitigung von Endlosschleifen)
    Finden Sie heraus, wieso es im folgenden Programm zu einer Endlosschleife kommt. Erstellen Sie
    dann ein Programm, das der untenstehenden Programmbeschreibung entspricht - und in dem keine
    Endlosschleife mehr vorkommt.

    und dazu dieses Programm:

    /* Programm verunglueckte_schleife
    * Soll alle ganzen Zahlen zwischen 0 und 255 ausgeben,
    * mit Ausnahme der Zahlen 3, 10, 100, 110 und 199.
    *
    * Autor: Bleibt lieber anonym
    * Version: 2.0
    * Datum: 15.10.2014
    */
    #include <stdio.h>
    int main(void)
    {
    unsigned char index;
    for(index=0; index<=255 & (index!=3, 10, 100, 110, 199); index=index+1);
    {
    printf("%u\n", index);
    }
    return 0;
    }

    Wenn Ich den Debugger laufen lasse, wird garkeine Zahl ausgegeben.

    Ich probiere schon die ganze Woche herum und verzweifle langsam 😞 😕

    Danke im Voraus 🙂



  • Das Semikolon am Ende des Schleifenkopfes von for sieht harmlos aus, bedeutet aber, dass er Schleifenkörper der for-Schleife eben auch nur aus der leeren Anweisung besteht, die durch jenes Semikolon abgeschlossen wird -- es passiert also außer dem (endlosen) Hochzählen der Laufvariable überhaupt nichts. Fiese Falle, kommt aber immer mal wieder vor, deshalb sollte man das kennen und den Blick dafür schärfen.

    Die anderen Fehler findest du selbst?



  • Vielen lieben dank 🙂
    Ich habe jetzt die Fehler berichtigt, die mir schon vorher aufgefallen sind (getchar () hat gefehlt und beim Eintrittskriterium müssen zwei & hin - oder?).
    Jetzt sieht mein Programm so aus:

    #include <stdio.h>
    int main(void)
    {
    unsigned char index;
    for (index = 0; index <= 255 && (index != 3, 10, 100, 110, 199); index = index + 1)
    {
    printf("%u\n", index);
    }
    getchar();
    return 0;
    }

    Jetzt werden allerdings wirklich alle Zahlen endlos ausgegeben, wie in der Aufgabe beschrieben 😞
    Meine Überlegung war, dass ich (index != 3, 10, 100, 110, 199) garnicht als Eintrittskriterium formulieren kann sondern dafür eine if-Anweisung nutzen muss.
    Ich glaube aber dass ich es damit komplizierter mache als es sein soll.



  • frsch022 schrieb:

    Ich habe jetzt die Fehler berichtigt, die mir schon vorher aufgefallen sind (getchar () hat gefehlt und beim Eintrittskriterium müssen zwei & hin - oder?).

    Ob getchar() unbedingt sein muss? 😕 Und ob da & oder && stehen muss erfährst du, wenn du dir anguckst, was diese beiden Operatoren jeweils bedeuten.

    Meine Überlegung war, dass ich (index != 3, 10, 100, 110, 199) garnicht als Eintrittskriterium formulieren kann sondern dafür eine if-Anweisung nutzen muss.

    Gute Überlegung, aber es wäre produktiver, wenn du sie begründen würdest. Guck dir außerdem den Operator , (Komma) an, wenn du verstehen willst, was dieser obskure Ausdruck (index != 3, 10, 100, 110, 199) bedeutet.



  • Ach ich glaube jetzt hab Ich es, vielen Dank für ihre Hilfe 🙂


Anmelden zum Antworten