Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C++ (http://www.go4expert.com/forums/cpp/)
-   -   error with code? (http://www.go4expert.com/forums/error-with-code-t21635/)

zendet 3Apr2010 01:11

error with code?
 
It works good if you get the word right, but when it starts if i get all my guesses wrong and then type y to restart it does not, it just stays put..

Code:


 
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
#include <ctime>
#include <cctype>

using namespace std;
string THE_WORD; // guess word
int wrong;
string soFar;
string used;
bool match(char letter, string word);
char askGuess(string usedLettersStr);
bool playAgain();
int main()  //main
{
 srand(time(0)); //gets the random word
 vector<string> words; // list of words to get
 words.push_back("BROWN");
 words.push_back("GOLD");
 words.push_back("GREY");
 words.push_back("SILVER");
 words.push_back("BLACK");
 words.push_back("WHITE");
 words.push_back("PURPLE");
 words.push_back("PINK");
 words.push_back("YELLOW");
 words.push_back("GREEN");
 words.push_back("RED");
 words.push_back("BLUE");
 
//title
cout<<"\n\n";
cout<< "\t##  ##  ####    ##  ##  ###    ##      ##  ####    ##  ##\n";
cout<< "\t##  ##  ##  ###  ###  ##  ##      ###    ###  ##  ###  ###  ##\n";
cout<< "\t######  #######  ## # ##  ##  ###  ## #  # ##  #######  ## # ##\n";
cout<< "\t##  ##  ##  ##  ##  ###  ##  #  ##  ##  ##  ##  ##  ##  ###\n";
cout<< "\t##  ##  ##  ##  ##  ##  ####    ##  ##  ##  ##  ##  ##  ##\n\n";

 cout << "\t\t\t  Hangman 2010 - Wayne Daly\n";
 
 cout<< "\n\n\nHINT: The word is a colour\n";
 // loop starts here
 bool done = false;
 do
 {
  const int MAX_WRONG = 8; // maximum number of incorrect guesses allowed before death, change your total lives here
  random_shuffle(words.begin(), words.end());
  THE_WORD = words[0]; // word to guess
  soFar = string(THE_WORD.size(), '*'); // word guessed so far
  used = ""; // letters already guessed
  // loop for current word
  while ((wrong < MAX_WRONG) && (soFar != THE_WORD))
  {
  cout << "\n\nYou have " << (MAX_WRONG - wrong)
    << " Lives left.\n";
  cout << "\nYou've picked the following correct letters:\n" << used
    << endl;
  cout << "\nSo far, the word is:\n\n" << soFar << endl;
  used += askGuess(used);
  {
  } // end of while
 

  }
  if (wrong == MAX_WRONG) //when all your lives are gone
  {
  cout<<"\n\n";
  cout<<"  +----+    \n";
  cout<<"  |    |    \n";
  cout<<"  |    O    \n";
  cout<<"  |  /|\\  \n";
  cout<<"  |  / \\  \n";
  cout<<"  |Your Dead \n";
  cout<<"  ============\n\n";
 
 
  }
  cout << "\nThe word was " << THE_WORD << endl;
 } while (playAgain());
 return 0;
}
inline bool match(char letter, string word)
{
 return (word.find(letter) != string::npos);
}
char askGuess(string usedLettersStr)
{
 char guess;
 cout << "\n\nEnter your guess: ";
 cin >> guess;
 guess = toupper(guess); //make uppercase since secret word in uppercase
 while (used.find(guess) != string::npos)
  while (match(guess, used))
  {
  cout << "\nYou have already guessed " << guess << endl;
  cout << "Enter your guess: ";
  cin >> guess;
  guess = toupper(guess);
  }
 
 if (match(guess, THE_WORD))
 {
  cout << "That's right! " << guess << " is in the word.\n";
 }
 else
 {
  cout << "Sorry, " << guess << " isn't in the word.\n";
  ++wrong;
 }
 // update soFar to include new guessed letter
 for (unsigned int i = 0; i < THE_WORD.length(); ++i)
  if (THE_WORD[i] == guess)
  soFar[i] = guess;
 return 0;
}
bool playAgain() //play again while clearing system
{
 char again;
 cout << "\n\nWould you like to play again? <y/n>: ";
 cin >> again;
 cin.clear(); //clear and ignore cin
 cin.ignore();
 again = toupper(again);
 system("cls");
 return (again == 'Y');
}


virxen 5Apr2010 01:42

Re: error with code?
 
common mistake when you use global variables.

Code:

.................
const int MAX_WRONG = 8; // maximum number of incorrect guesses allowed before death, change your total lives here
    wrong=0;//add this.
    random_shuffle(words.begin(), words.end());
.................



All times are GMT +5.5. The time now is 11:46.