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 ­čÖé


Log in to reply