2x das gleiche, warum genau ist das eine besser?:)



  • int secretNum = 7;
        int guess;
        int guessCount = 0;
        int guessLimit = 3;
        bool outOfGuesses = false;
    
    
        while(secretNum != guess && !outOfGuesses){
    
            if(guessCount < guessLimit){
                cout << "Enter guess:  ";
                cin  >> guess;
                guessCount++;
            } else {
                outOfGuesses = true;
    
            }
        }
    
        if(outOfGuesses){
            cout << "You Lose!";
            } else {
            cout << "You win! ";
        }
    
    
    -----------------------------------------VERSUS-----------------------------------------
    
    int secretNum = 7;
        int guess;
        int guessCount = 0;
    
    
    while(secretNum != guess && guessCount <= 3){
        cout << "Enter guess:  ";
        cin  >> guess;
    
        guessCount++;
    
    
    if(guess == secretNum){
        cout << "You win ! ";
    } else {
        cout << " You lose ! ";
    }
    
    if(guessCount >=5){
        cout << "Too many tries, you lose";
        break;
    }
    
    }
    

    Wäre sehr cool wenn mir jemand sagen könnte was alles besser ist am ersten:)



  • guess ist in beiden Fällen nicht initialisiert. Also taugen beide Varianten nichts 😉


  • Mod

    Die Varianten unterscheiden sich ja nur minimal, daher recht schwer zu sagen, was man "besser" nennen sollte. Mir fällt auf, das beide Varianten nicht sonderlich konsequent sind. Man könnte durch Mischung zwei verschiedene Varianten erzeugen, die beide besser wären, als das jetzige Original. Ich vermute sogar, beide Varianten machen gar nicht das was du willst. Hast du die mal gründlich getestet? Da kommt nämlich jeweils was anderes bei raus, und in beiden Fällen passt das Ergebnis nicht zu dem was du vermutlich haben möchtest.



  • @YAAAH sagte in 2x das gleiche, warum genau ist das eine besser?:):

    Wäre sehr cool wenn mir jemand sagen könnte was alles besser ist am ersten:)

    Warum nimmst du an, dass daran etwas besser ist?



  • Wenn das irgendeine Aufgabe ist, wo du was hinschreiben musst, dann würde ich nehmen:

    • kein break
    • in der Schleife nur Dinge, die wirklich in der Schleife sein müssen (win-test,...)

    Ansonsten schließe ich mich dem Rest an, der von beiden Varianten jetzt nicht unbedingt begeistert ist.



  • Danke für die schnellen Antworten 🙂

    @wob also wäre es besser int guess = 0; zu schreiben why?

    @SeppJ DANKE 😃 ;'D werde nochmal dran rumspielen

    @manni66 weil das erste nicht von mir ist^^

    @Jockelx danke:) warum kein break? ah danke ja, habs gemerkt hab bissi verkackt 🙂


  • Mod

    @YAAAH sagte in 2x das gleiche, warum genau ist das eine besser?:):

    @wob also wäre es besser int guess = 0; zu schreiben why?

    Welchen Wert hat guess in Zeile 8 bzw. 34, wenn es das erste Mal benutzt wird?

    @Jockelx danke:) warum kein break? ah danke ja, habs gemerkt hab bissi verkackt 🙂

    Es ist nicht direkt verkehrt, aber wenig elegant, weil unnötig schwer zu lesen. Deine Schleife erweckt den Eindruck, als wäre die Abbruchbedingung in Zeile 34, aber das stimmt halt gar nicht, weil die eigentliche Abbruchbedingung in Zeile 47 ist. (Modulo, dass dein Code falsch ist un die Bedingung in 47 daher nicht funktioniert, aber das ist dein Fehler, nicht deine Absicht.)



  • @SeppJ 0 oder Kauderwelsch ?:D aber hat funktioniert also ging ich von 0 aus o_o

    Ja x] hab den scheiß jetzt geändert, so sollte das 2. besser sein

    int secretNum = 7;
        int guess= 0;
        int guessCount = 0;
    
    
    while(secretNum != guess && guessCount < 3){
    
        cout << "Enter guess:  ";
        cin  >> guess;
    
        guessCount++;
    }
    
    
    
    if(guess == secretNum){
        cout << "You win! ";
    } else {
        cout << "You lose! ";
    
    }
    


  • Ich persönlich bevorzuge folgende Variante:

    for (int secretNum = 7, guess = 0, guessCount = 3; cout << "Enter guess: " && (cin >> guess || ((cout << "Fehlerhafte Eingabe!\n"), false)) && cout << (guess != secretNum ? "" : "You win!\n") && guess != secretNum && cout << (--guessCount < 1 ? "You lose!\n" : "") && guessCount > 0; );
    
    • Alle Variablen sind initialisiert
    • Kein break
    • Abbruchbedingung in der ersten Zeile
    • Macht was es soll
    • Fehlerbehandlung bei schlechter Eingabe
    • Nichts im Schleifenkörper, was nicht drin sein muss


  • @HarteWare sagte in 2x das gleiche, warum genau ist das eine besser?:):

    Ich persönlich bevorzuge folgende Variante:

    for (int secretNum = 7, guess = 0, guessCount = 3; cout << "Enter guess: " && (cin >> guess || ((cout << "Fehlerhafte Eingabe!\n"), false)) && cout << (guess != secretNum ? "" : "You win!\n") && guess != secretNum && cout << (--guessCount < 1 ? "You lose!\n" : "") && guessCount > 0; );
    
    • Maximale Lesbarkeit (kein vertikales Scrolling nötig) durch Verzicht auf Zeilenumbrüche
    • Weglassen von std:: für cin und cout vermeidet unnötigen Code-Bloat
    • Einsatz des ? :-Operators vermeidet inperformantes Branching eines if-Befehls
    • Lang gechainte und-Bedinungen stellen sicher, dass niemand aus der Reihe tanzt
    • Einsatz des ,-Operators stellt sicher, dass der Rückgabewert eines möglicherweise erfolgreichen cout bei fehlerhafter Eingabe nicht betrachtet wird

    😎 😱 👹



  • uff vielen dank, ich beschäftige mich damit mal ein bisschen 😃



  • wobei das horizontale scrollen mir komisch erscheint 😃



  • Das ist überhaupt nicht lesbar.



  • @YAAAH Das war eine humorvoll gemeinte Antwort, nicht wirklich ernst gemeint. Den Code brauchst Du nicht anschauen oder verstehen.
    @wob haha, der war gut

    Einsatz des ? :-Operators vermeidet inperformantes Branching eines if-Befehls


Anmelden zum Antworten