2017-04-05 2 views
-3

Ich bin neu in stackoverflow, und auch etwas neu in der Programmierung, also bitte beachten Sie meine schlechte Formatierung des Codes. Ich habe zwei Probleme mit meinem Code.Was ist los mit meiner Do ... while Logik, und weiter Logik?

  1. Meine continue-Anweisung, die ich verwende, um die Schleife fortzusetzen, wenn der Spieler 'y' oder 'Y' eingibt, funktioniert nicht. Sie endet das Programm nach nur die Vermutung richtig bekommen, die mich führt zu:

2.My Zähler weiter geht vorbei 0, ohne anzuhalten, und ich kann einfach nicht meinen Fehler in der Logik des Programms sehen .

Ich kann die Probleme mit meiner Logik nicht sehen.

#include "stdafx.h" 
    #include <iostream> 
    #include <iomanip> 
    #include <ctime> 
    #include <random> 

    using namespace std; 

    int getNumber(); //random number prototype 
    double getScore(); //gets score 
    int chances = 7; //chances to guess with 
    int main() 
    { 
    int guess = 0, 
     random; 
    char retry = 'y'; //initialize retry to 'y' 
    cout << "This is a random number guessing game. " << "You will be guessing between 1-100." 
    << "You have 7 chances. Good luck! \n \n" << endl; 


    random = getNumber(); //give the function a variable 

    do 
    { 

    cout << random << "\n" << "\n"; 
    chances--; 

    cout << "Enter your guess: "; 
    cin >> guess; 

     if (guess == random) 
     { 
      cout << "You have won the game! " << "Your score was: " << getScore(); 

      cout << "Would you like to retry? (Y or N): "; 
      cin >> retry; 

      if (retry == 'y' || retry == 'Y') 
      { 
       chances = 7; 
       guess = 0; 
       getNumber(); 
       continue; //player can retry the game 
      } 
      else if (chances == 0) 
      { 
       cout << "You have no chances left. Retry? (Y or N): "; 
        cin >> retry; 
       if (retry == 'y' || retry == 'Y') 
       { 
        chances = 7; 
        guess = 0; 
        getNumber(); 
        continue; 
       } 
      } 

       return 0; 
     } 
     else if (guess != random) 
      cout << "You got it wrong. \n" << "You have: " << chances << " chances left" << endl << endl; 
     else 
      cout << "Incorrect Input. Please type a number." << endl << endl; 
    } while (guess != random); 


return 0; 
} 

int getNumber() 
    { 
    unsigned seed = time(0); //seed the random number 
    srand(seed); 

    int randNum = rand() % 10 + 1; //random number in the range of 1-10 
    return randNum; 
    } 
+1

Ich kümmere mich um Ihre schlechte Formatierung. Neu zu sein hindert Sie nicht daran, Zeit und Mühe zu investieren, um Ihren Code schön zu formatieren. Sie können eine beliebige Anzahl von bestehenden, erfolgreichen Fragen für Beispiele betrachten. Stack Overflow bietet eine hervorragende Live-Post-Vorschau, sodass Sie so viel Zeit wie nötig verbringen können, um den Post gut aussehen zu lassen. –

+1

'if (retry == 'y' || 'Y')' das tut nicht, was du denkst es tut – JackVanier

Antwort

1

Sie werden möchte einen Blick auf this

Ihre continue Anweisung an das Ende springen und die Überprüfung der Bedingung, guess != random, die zu falsch ausgewertet und tritt aus dem do while. Sie müssen die Schätzung auf einen Wert wie 0 zurücksetzen, damit die Bedingung true auswertet.

+0

Vielen Dank für die Erklärung. Ich konnte nicht sehen, was vor sich ging. Ich wusste nicht, dass ich die Schätzung auch zurücksetzen musste. Das war der Grund, warum ich es zurücksetzen musste, denn wenn es weiterging, würde es prüfen, ob die Schätzung zufällig war, und da der Spieler es richtig gemacht hat, wäre es automatisch falsch gewesen, wenn es die Zeit verlassen hätte? –

2
if (retry == 'y' || 'Y') 

Diese falsche Logik ist, weshalb der Code ist so, wie Sie es wollen nicht funktioniert. Sie möchten, dass es lautet:

if (retry == 'y' || retry == 'Y') 

Korrigieren Sie diesen logischen Fehler auch in Ihren anderen if-else-Anweisungen.

+0

Danke, das habe ich nicht einmal gemerkt. Ich habe meinen Code bearbeitet, aber er startet den Loop immer noch nicht, wenn der Player ihn eingibt. Ich werde weiterhin nach dem Problem suchen. Danke nochmal! –

+0

@CoryAhapow Wenn meine Antwort funktioniert, wählen Sie bitte das Häkchen neben meiner Antwort aus. Es sollte grün werden, wenn Sie dies tun. Vielen Dank! –