#include "stdafx.h"
#include <time.h>
#include <stdlib.h>
#include <iomanip>
#include <iostream>
#include <string>
#include <fstream>
#include <cmath>
#include <stdio.h>
#include <cstdlib>
#include <sstream>
#include <vector>
using namespace std;
int main();
class Hangman
{
public:
void set_values (string, string, string, string, string, string, string, string, string, string, string, string, string, string);
void randomWordGenerator(int);
void letterCount();
void blankSpaces();
void welcomeMessage();
void yesOrNo();
void randomNumberGenerator();
void guessCount();
//****new function to process correct guesses
private:
string line[13];//set_values
string chosenWord;//randomWordGenerator
int strsz;//letterCount
char input;//welcomeMessage
int random_integer;//randomNumberGenerator
string guess;//guessCount record of guesses
} man;
void Hangman::guessCount()
{
int h;
for(h=0;h<=5;h++)
{
cout << "Make a guess: ";
cin >> guess[h];//error up to this point on second loop
int e;
for(e=0;e<strsz;e++)
{
if (chosenWord[e] == guess[h])
{
cout << "guessCount success!" << endl;
//call another function to process correct guess
}
}
man.blankSpaces();
}
}
void Hangman::yesOrNo()
{
if (input == 'Y' || input == 'y')
{
man.randomNumberGenerator();
man.randomWordGenerator(random_integer);
man.letterCount();
man.blankSpaces();
man.guessCount();
main();
}
else
{
cout << "Goodbye." << endl;
system ("PAUSE");
}
}
void Hangman::randomNumberGenerator()
{
srand((unsigned)time(0));
random_integer = (rand()%10)+1;
}
void Hangman::welcomeMessage()
{
cout << "Welcome to the hangman game!" << endl;
cout << "Would you like to play? (Y/N)" << endl;
cin >> input;
}
void Hangman::blankSpaces()
{
cout << "Your word to guess: ";
int k;
for (k=0; k<strsz; k++)
{
cout << "_ ";
}
cout << setw(30) << "Letters guessed so far: ";
int p;
for(p=0;p<=guess.length();p++)
{
cout << guess[p];
}
cout << endl;
}
void Hangman::letterCount()
{
strsz = chosenWord.length();
cout << chosenWord << " " << strsz << endl;
}
void Hangman::randomWordGenerator(int e)
{
int i;
for(i=0; i<=13; i++)
{
if ( e == i )
{
chosenWord = line[i];
}
}
}
void Hangman::set_values (string a, string b, string c, string d, string e, string f, string g, string h, string i, string j, string k, string l, string m, string n)
{
line[0]=a;
line[1]=b;
line[2]=c;
line[3]=d;
line[4]=e;
line[5]=f;
line[6]=g;
line[7]=h;
line[8]=i;
line[9]=j;
line[10]=k;
line[11]=l;
line[12]=m;
line[13]=n;
}
void Initialize ()
{
string line[14];
ifstream wordfile;
wordfile.open("words.txt");
while( !wordfile.eof() )
{
int i;
for (i=0; i<=13; i++)
{
std::getline (wordfile, line[i]);
}
man.set_values(line[0], line[1], line[2], line[3], line[4], line[5], line[6], line[7], line[8], line[9], line[10], line[11], line[12], line[13]);
}
}
int main()
{
Initialize();
man.welcomeMessage();
man.yesOrNo();
return 0;
}
This code outputs the following before producing a error:
Welcome to the hangman game!
Would you like to play? (Y/N)
y //input to input
plum 4 //this line is printed strictly for reference and will not be in (the word to guess and the number of letters in the word) the actual finished program
Your word to guess: _ _ _ _ Letters guessed so far:
Make a guess: l // input to guess
guessCount success! //verification that the guess matched a letter
Your word to guess: _ _ _ _ Letters guessed so far: l
Make a guess: // errors out here with this error:
Expression: string subscript out of range
I have pinpointed the error to
cin >> guess[h]; in the void Hangman::guessCount() function (line 47)
I have a feeling that the error is coming from trying to put in the input to guess[1] on the second loop and I'm not experienced enough to recognize what that error would be.
I think I need to implement vectors on the string guess array but it seems to produce even more errors. I guess I do not understand why the guess array cannot take a input at guess[1].
Any help would be appreciated, Thanks