Problem mit einer Schleife (wurde zur Endlosschleife)



  • Ich habe ein Problem mit einem kleinen Programmschnipsel...

    while (weiter) {
            ++lauf;
            weiter = 0;
            for (i = 0; i < maxW; ++i)
                printf("  %c", l[i] && l[i] >= lauf ? '*' : ' '), weiter =! weiter ? l[i] > lauf : weiter;
                printf("                           %c", l[i] && l[i] >= lauf ? '*' : ' '), weiter =! weiter ? l[i] > lauf : weiter;
            puts("");
    
        }
    

    Alles was ich weiß ist, dass das Problem in der Zeile mit dem
    zweiten "printf" liegt... nur was genau, verstehe ich nicht.
    Übrigens, bevor ich den zweiten "printf" reinkopiert habe, war es noch keine Endlose Schleife.



  • Geschweifte Klammern vergessen?

    BTW, wenn du solchen Code ohne stolpern lesen kannst:

    weiter =! weiter ? l[i] > lauf : weiter
    

    hättest du das Problem selbst finden müssen.



  • Danke, ich bin nur noch nicht lange wach...und habe mir
    dann das einfach doppelt gemacht, bin noch nicht so fit 😃



  • Ist mir jetzt peinlich, dennoch frage ich lieber...
    wo genau? 😕 ich verstehe zwar das konstrukt...nur die Logik blicke ich noch
    nicht soo ganz genau



  • Was den Rumpf deiner for-Schleife ausmacht, orientiert sich nicht an deiner Einrückung 😉



  • Du rückst die beiden printf-Zeilen ein, du scheinst also beide in der for-Schleife haben zu wollen. Tatsächlich wird aber nur die erste in der Schleife ausgeführt. Probier mal so:

    for (i = 0; i < maxW; ++i) {
                printf("  %c", l[i] && l[i] >= lauf ? '*' : ' '), weiter =! weiter ? l[i] > lauf : weiter;
                printf("                           %c", l[i] && l[i] >= lauf ? '*' : ' '), weiter =! weiter ? l[i] > lauf : weiter;
            }
    


  • Und wenn du nicht so viele Anweisungen in einer Zeile unterbringen würdest, könnte man das Programm deutlich besser lesen (sowohl wir als auch du). Kompakter Code ist schön und gut, er darf aber die Lesbarkeit nicht völlig eliminieren.



  • Hmm, jetzt gibt es aber nurnoch die Hälfte der Ausgabe... da ich ja
    die "while-Schleife" weglassen soll...funktioniert auch nicht so recht.



  • Okay, mein Denkfehler...passt schon.
    for-Schleife gehört in die while-Schleife...



  • hmmm, irgendwie macht er die Sternchen nicht so wie ich will...
    er macht nähmlich garkeine, obwohl er immer einen Stern machen soll,
    wenn l[i] größer ist als maxW...

    printf("  %c", maxW < l[i] ? '*' : ' '), weiter =! weiter ? l[i] > lauf : weiter;
    


  • Dann gehe schrittweise mit dem Debugger durch und überprüfe jeden Teilschritt!


Anmelden zum Antworten