2017-07-12 6 views
1

Also, ich muss ein Programm aus einem zufälligen Ratespiel schreiben. Das Programm muss den Spieler bitten, eine Zahl zwischen 1-100 zu erraten. Mindestens eine Funktion muss verwendet werden. Er muss dem Spieler sagen, ob er zu tief oder zu hoch ist, ihn auffordern, es erneut zu versuchen, oder, wenn er es erraten hat, ihn bitten, erneut zu spielen.C++ Random Number Guessing Spielfehler

Ich habe ein paar Fehler, die ich nicht herausfinden können.

44: Fehler: 'int winlose' als andere Art von Symbol redeklariert 9: Fehler: vorherige Erklärung 'int winlose (int)' 44: Fehler: 'g' nicht in diesem Umfang

erklärt wurde

-Code

#include <iostream> 
#include <cstdlib> 
#include <ctime> 
using namespace std; 

int winlose(int); 

int main() 
{ 
    int g, n, x; 

    while (x!=0) 
    { 
     do 
     { 
      srand(time(NULL)); 
      n = 1 + rand()%100; 

      cout<<"Welcome to the guessing game. I have a number between 1-100. 
       Can you guess it?"<<endl; 
      cout<<"Please enter your guess"<<endl; 
      cin>>g; 

     winlose(g); 
     } while (n!=0); 

     cout<<"Play again? Enter 0 for no, any other number for yes."<<endl; 
     cin>>x; 
    } 
    return 0; 
} 

int winlose(g) 
{ 
    if (g<n) 
    { 
     cout<<"Your guess is too low. Try again."<<endl; 
     cin>>g; 
    } 
    else if (g>n) 
    { 
     cout<<"Your guess is too high. Try again."<<endl; 
     cin>>g; 
    } 
    else (g=n) 
    { 
     cout<<"Congrats! You win. The number was "<<n<<endl; 
     n=0; 
    } 
    return g; 
    return n; 
} 
+0

'int winlose (g)' diese Syntax keine gültige Funktionsdeklaration ist – Borgleader

+2

'int winlose (g)' -> 'int winlose (int g) ' – HolyBlackCat

+1

[Off Topic] Ruf 'srand' ** nur einmal ** an, außer du weißt wirklich was du tust. – NathanOliver

Antwort

2

Sie haben ein paar Fehler zusätzlich zu der Funktionsdeklaration. Funktionsdeklarationen müssen die Art der einzelnen Parameter enthalten, so dass der richtige Weg ist:

int winlose(int g); 

Sie können einen Zustand in einer else-Anweisung verwenden: (else (g=n)). Eine else-Anweisung ist ein Catch-all, wenn keine der vorherigen Bedingungen (die in den if und) erfüllt wurden. Wenn Sie nur möchten, dass dies bei einer bestimmten Bedingung ausgelöst wird, verwenden Sie eine andere . Sie müssen keine else am Ende jeder if Anweisung haben; es ist vollkommen richtig, mit einem else if(){...} zu enden.

Sie müssen auch mit '==' anstatt '=' vergleichen. = ist der Zuweisungsoperator und g=n wird den Wert von g auf n setzen. Wenn Sie prüfen möchten, ob g gleich n ist, müssen Sie g==n

verwenden Sie sollten srand() in der äußeren Schleife aufrufen, sonst ändert sich nach jeder Schätzung Wert.

Der Rest korrigiert wird und manchmal leicht für die korrekte Leistung geändert:

#include <iostream> 
#include <cstdlib> 
#include <ctime> 
using namespace std; 

bool winlose(int number, int givenNumber); 

int main(){ 
    int g, n, x; 
    bool guessed; 
    do { 
     srand(time(NULL)); 
     n = 1 + rand()%100; 
     cout<<"Welcome to the guessing game. I have a number between 1-100. Can you guess it?"<<endl; 
     do { 
      cout<<"Please enter your guess"<<endl; 
      cin>>g; 
      guessed = winlose(g, n); 
     } while (!guessed); 

     cout<<"Play again? Enter 0 for no, any other number for yes."<<endl; 
     cin>>x; 
    } while (x!=0); 
    return 0; 
} 

bool winlose(int g, int n) { 
    if (g<n) { 
     cout<<"Your guess is too low. Try again."<<endl; 
     return false; 
    } 
    else if (g>n) { 
     cout<<"Your guess is too high. Try again."<<endl; 
     return false; 
    } 
    else { 
     cout<<"Congrats! You win. The number was "<<n<<endl; 
     return true; 
    } 
}