Programm verlässt die schleife nicht



  • @Drakon Ja an dem Wort bin ich verzweifelt^^ Korrektur: "Folgendes"
    Quelle: http://lmgtfy.com/?q=vollgendes 🤡

    so ähm ja aber so richtig hab ich meine Fehler jetzt noch nicht gefunden...^^
    Bitte noch genauere Hinweise ^^

    fg Wurst 😃



  • Schau dir Draveres Beispiel noch mal gaaanz genau an. Und probier mal die Variante, die er vorschlägt. Dann sollte es dir an den Kopf schlagen. 😉


  • Administrator

    @wurstuk
    *edit, rauschneid* nein so gemein will ich nicht sein 🙂
    = <-> ==

    Grüssli



  • /rant/ schrieb:

    oO der Compiler sollte aber doch bei solchen Fehlern warnen? 😮

    Es ist ja kein Fehler, sondern eine zulässige Zuweisung an der Stelle. Das der Programmierer etwas anderes wollte kann der Compiler ja nicht entscheiden. Vor so etwas kann der Compiler bestenfalls warnen, mehr nicht.



  • Dravere schrieb:

    Deshalb sollten Literale bei Vergleichen immer zuerst kommen, dann gibt es einen Kompilerfehler.

    Den Fehler macht man kaum mehr, wenn man den Unterschied der beiden Operatoren mal kennt. Ich finde es jedenfalls hässlich, auf der linken Seite den Wert zu haben. Von der Logik her macht für mich die andere Schreibweise auch mehr Sinn - man prüft schliesslich eine Variable auf Gleichheit mit einem Wert.

    Ist meine Sichtweise, vielleicht finden das gewisse Leute irreführend. Ist aber Geschmackssache. 😉

    loks schrieb:

    Vor so etwas kann der Compiler bestenfalls warnen, mehr nicht.

    Ich finde nicht mal eine Warnung angebracht, denn es kommt ab und zu vor, dass man in einer Bedingung gleich eine Zuweisung vornehmen will und das Resultat prüft.



  • ganz ehrlich... ich glaube ich bin einfach zu blöd... 😃

    ich hab überall geguckt aber nirgends steht bei mir steht irgendwas von true = w^^ könnt ihr mir vielleicht den Bereich markieren wo der Fehler ist?

    fg Wurst 🕶



  • Du sollst Zeile 14 (die Dravere in seinem Beitrag exakt zitiert hat) durch das, was Dravere darunter zitiert hat, ersetzen.


  • Administrator

    wurstuk schrieb:

    ganz ehrlich... ich glaube ich bin einfach zu blöd... 😃

    ich hab überall geguckt aber nirgends steht bei mir steht irgendwas von true = w^^ könnt ihr mir vielleicht den Bereich markieren wo der Fehler ist?

    😮 !! O M G !! 😮
    Du hast das hier geschrieben:

    while ( w = true)
    

    Das ist eine Zuweisung und kein Vergleich. Das ist immer true !

    while ( w == true)
    

    oder gleich:

    while (w)
    

    Wäre die richtige Form!

    Nexus schrieb:

    Den Fehler macht man kaum mehr, wenn man den Unterschied der beiden Operatoren mal kennt. Ich finde es jedenfalls hässlich, auf der linken Seite den Wert zu haben. Von der Logik her macht für mich die andere Schreibweise auch mehr Sinn - man prüft schliesslich eine Variable auf Gleichheit mit einem Wert.

    Ist meine Sichtweise, vielleicht finden das gewisse Leute irreführend. Ist aber Geschmackssache. 😉

    Kaum mehr, genau. Ich mache ihn auch nur noch sehr selten, aber es kommt schon hin und wieder mal vor. Da bin ich jedesmal froh, wenn der Kompiler mir gleich einen Fehler an den Kopf schmeisst 😉
    Bei der Logik muss ich dir zustimmen. Es macht irgendwie mehr Sinn andersrum und ich finde es oft ein wenig hässlich. Aber wirklich schlimm stören tut es nicht. Dafür jedesmal, wenn es mich davor bewahrt hat, mein Programm mit Debug-Break-Points zu zupflastern, um irgendwo eine Endlosschleife zu finden oder einen nicht funktionierenden Vergleich, dann bin ich überglücklich 😉

    Grüssli



  • Dravere schrieb:

    Dafür jedesmal, wenn es mich davor bewahrt hat, mein Programm mit Debug-Break-Points zu zupflastern, um irgendwo eine Endlosschleife zu finden oder einen nicht funktionierenden Vergleich, dann bin ich überglücklich 😉

    Grüssli

    So Schleifenfehler sind aber noch recht dankbar durch das, dass man sie kaum übersehen kann sofern man nicht noch andere, komplizierte Abbruchbedingungen und Stellen hat. Da sollte man das ganze sowieso gründlich testen.. Und auf eine falsche Zuweisung schaut man normalerweise immer zuerst. 🙂


  • Administrator

    drakon schrieb:

    So Schleifenfehler sind aber noch recht dankbar durch das, dass man sie kaum übersehen kann sofern man nicht noch andere, komplizierte Abbruchbedingungen und Stellen hat. Da sollte man das ganze sowieso gründlich testen.. Und auf eine falsche Zuweisung schaut man normalerweise immer zuerst. 🙂

    Sagen wir es so:
    1. Jeder Fehler kostet Zeit. Schon nur um den Debugger zu starten und den Fehler einigermasen einzugrenzen, das Dauert einfach alles. Vielleicht brauchst du mal nur 5 Minuten, aber es sind 5 Minuten weg, für einen absolut idiotischen Fehler, den du durch eine bessere Schreibeweise innert 5 Sekunden eliminiert hättest.
    2. Wenn du eine Bibliothek schreibst, wo du mehrere Schlaufen und co hast. Du machst dir ein kleines Programm, um diese Bibliothek zu testen und plötzlich hängt das Programm, dann kannst du zuerst einmal suchen gehen, wo in diesen zig Schleifen das Programm nun hängen blieb.
    Oder wieso würde die Option xyz nicht ausgeführt, wobei das eher einfacher ist, um zu finden.
    Ok, es wäre dwohl sinnvoll Unit-Tests durchzuführen, aber ich kenne mich damit immer noch zu wenig aus. Müsste ich aber dringend mal nachholen. Aber auch dann, es kostet Zeit, unnötige Zeit.
    3. Ja, es ist ein einfacher Fehler, den mal im Vergleich relativ schnell beseitigt hat. Aber wieso überhaupt unnötig Zeit verschwenden, wenn man den Fehler deutlich schneller beseitigen kann? Ich setze Fehlersicherheit über Schönheit im Code.

    Grüssli



  • Dravere schrieb:

    ...

    Ich habe ja nichts gesagt, dass man den Fehler machen soll oder eine Zuweisung im Schleifenkopf..?! - War nur eher eine Begründung, warum man diesen Fehler nach einer Weile nicht mehr wirklich macht. Da gibt es Haufenweise andere banale Fehler, die man öfter macht, als den da.


  • Administrator

    drakon schrieb:

    Ich habe ja nichts gesagt, dass man den Fehler machen soll oder eine Zuweisung im Schleifenkopf..?!

    Habe ich irgendwo gesagt, dass du dies gesagt hast? 😕

    drakon schrieb:

    War nur eher eine Begründung, warum man diesen Fehler nach einer Weile nicht mehr wirklich macht.

    Eine Begründung? Ich sehe nur, dass du gesagt hast, dass der Fehler banal sei und einfach zu finden. Und das mit meinem Quote zusammen und dem was ich vorhin geschrieben habe, verstehe ich das eher so, dass du diese Fehlerbeseitigung während der Kompilezeit als unnötig empfindest, da der Fehler so einfach zu finden sei. Also eben Schönheit vor Fehlersicherheit ...

    drakon schrieb:

    Da gibt es Haufenweise andere banale Fehler, die man öfter macht, als den da.

    Was hat das Ganze mit anderen Fehlern zu tun? Klar macht man auch andere Fehler, aber was hat das mit dem aktuellen Thema zu tun??

    -> Absolut 😕

    Grüssli



  • Sorry, wollte das ganze jetzt nicht so tief in offtopic stossen..

    Habe ich irgendwo gesagt, dass du dies gesagt hast?

    Nein, aber deine Ausführung hat so geklungen, dass ich den Fehler gut finde, oder so.. 😉

    Eine Begründung? Ich sehe nur, dass du gesagt hast, dass der Fehler banal sei und einfach zu finden. Und das mit meinem Quote zusammen und dem was ich vorhin geschrieben habe, verstehe ich das eher so, dass du diese Fehlerbeseitigung während der Kompilezeit als unnötig empfindest, da der Fehler so einfach zu finden sei.

    Den Fehler macht man kaum. -> Begründung: Man kann ich fast nicht übersehen, da eine Endlosschleife einfach auffält und man i.d.R dann zuerst mal auf den Schleifenkopf und die Bedingung schaut.

    Also eben Schönheit vor Fehlersicherheit ...

    In dem Falle Ja, auch wenn ich zuerst gar nicht auf das bezogen geantwortet habe. Ich empfinde den Fehler einfach nicht als so tragisch genug, damit er mich in meinem Programmfluss stört. Da gibt es mehr andere banale Sachen, die viel fataler sind und man vorher sich einen sichereren Weg zu tun sollte, als das hier. (Ich finde die Idee auch eigentlich ganz gut, und wollte mich auch mal umgewöhnen, aber ich habe dann gemerkt, dass mich das extrem stört und ich den Fehler gar nicht mache)



  • drakon schrieb:

    Also eben Schönheit vor Fehlersicherheit ...

    In dem Falle Ja [...]. Ich empfinde den Fehler einfach nicht als so tragisch genug, damit er mich in meinem Programmfluss stört.

    Genau. Ich weiss nicht, wann ich diesen Fehler letztes Mal begangen habe. Und falls man ihn begeht, hat man wohl eher nicht 5 Minuten, um ihn zu lokalisieren. Klar kann es mal vorkommen, zum Beispiel um 4 Uhr morgens, nachdem man 22 Stunden wach gewesen ist. 🙂

    Ich wäre bei dieser Schreibweise wahrscheinlich nur verwirrt und hätte länger, bis ich einen Vergleich mit vertauschten Operanden erkennen würde. 😉
    Code-Übersicht ("Schönheit") hat eben auch Einfluss auf die verbratete Zeit.

    Aber schlussendlich geht das wiederum in Richtung Code-Stil und ist somit auch zu einem grossen Teil Geschmackssache...


  • Administrator

    Nexus schrieb:

    Aber schlussendlich geht das wiederum in Richtung Code-Stil und ist somit auch zu einem grossen Teil Geschmackssache...

    Oja! Büchse der Pandora öffnen!

    Aber ich denke du hast da schon recht, ist wohl schon Geschmacksache. Ich hätte es früher überhaupt nicht lesen können, heute finde ich es hässlich oder unlogisch, aber beim Lesen macht es mir nichts mehr aus.

    Und doch, ich hatte es erst letztens wieder. Normalerweise schaut man ja immer dreimal drauf, was man nun getippt hat, ob es ein Vergleich ist oder eine Zuweisung. Aber dort hatte ich irgendwie nicht so richtig hingeschaut. Ich glaube es war eine Korrektur von >= zu ==, aber habe irgendwie nur das > gelöscht ... Aber der Kompiler hat dann immerhin gemotzt.
    War sowieso ein verflixter Code. Den Fehler fand ich am schönsten:

    // Irgendwo:
    typedef unsigned char ColorIndex;
    
    // An einem anderen Ort:
    static unsigned int const power_helper[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256 };
    
    for(ColorIndex i = 0; i < power_helper[resolutionBits]; ++i)
    {
      // Wobei resolutionBits dann 8 war :)
      // ...
    }
    

    *sich von den bösen Moderatoren angestarrt fühlt*
    Ja, das ist jetzt extrem Off-Topic ... sooooorrrryyyy
    Aber ich war ja ganz nett und habe dem Hilfesuchenden zweimal genau auf den Fehler hingewiesen mit zusätzlichen Tipps.
    *die Moderatoren mit grossen Drachenaugen anglubscht*
    -> http://jc.wildfuryx.com/jcdragon-want.gif <-

    Grüssli



  • Knapp daneben ist auch vorbei. :p

    Und den Kommentar zu dem Bild verkneife ich mier jetzt mal. 😉



  • OK scheiße das war wirklich ein !sehr! dummer Fehler... aber trotzdem danke das ihr mir geholfen habt 😃

    fg Wurst 🕶


Anmelden zum Antworten