ENUM FUN SOS!

Hey. I'm trying to get my enums right. I have a function called hangman below and at the bottom there are condition on returning what type of enum to main. I'm having a hard time doing this. The LOST returns fine but the other enum WIN does not.
This is the first little part.
1
2
3
4
5
6
7
if(rightword==str1)
	return WON;

	 if(chances== 7)
	cout << "Sorry, The game is over." << endl;
		return LOST;
	

rightword is a string. I was thinking the probelm lied here. So I was kind of looking at this. See if I can get my enums back to main correctly I feel I will be ok because I can write something to sort out the selection. And use that to keep my game hangman going if the enum is CONTINUE.
Here is the whole code.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
//Selection for word guess
void guessTheword(string str1, int chances, string& rightword)
{	
	
	int win=1;
	char yesno=' ';
	
	if(chances <6 )																   //|| yesno =='Y')
	{
	cout << "Do you want to guess the word ,'Y' or 'N' ? " ;
	
	
	cin >> yesno;
	
	switch (yesno)
	{  
		case 'Y':
		cout << "Enter your word now: " ;
		
		cin >> rightword;
		
		if( rightword == str1)
		{
		cout << "Congratulations " << endl;
		if(win==1)
		cout << "You have won " << win << " game. " << endl;
		
		if(win>1)
		cout << "You have won " << win << " games. " << endl;
		win++;
		
		}
		else if(rightword !=str1)
		cout << "Sorry, that is not the word " << endl;
		break;
		
		case 'N': break;
	
		default : 
		cout << "Invalid choice." << endl;
			
	}
		
	}





}

// To display the the matching process
void matchingoutputs( bool match, int& chances, string secret, 
	char letter, string str1, string& rightword)
{
	if(rightword!=str1)
	{
		if(match)
		{
			cout << "The word is now " << secret << 
			'\n' << endl;
			
			guessTheword(str1, chances, rightword);
		
		
		
		}
		else if(!match)
		{
			cout << "Sorry, no occurrences of " << letter << 
			'\n' << endl;
			
		guessTheword(str1, chances, rightword);
			chances++;
		}


	}	

	

}

// Hangman function
gameEnum PlayHangman(const string str1)
{	
	
	string rightword ="";
	char choice = ' ';
	char letter=' ';
	string secret (str1.size(), '*' );
	bool match;
	int chances= 0;
	
	
	
	// First Iteration message	
	firstIteration(str1, secret);
	
	
		
	
	while(chances !=7)
	{
		match = false;  
		
		
		// User prompt
		if(str1!= rightword)
		{
		cout << "Enter a letter: " ; 
		cin >> letter;  
		}

		// Loop to match letters

		for( string::size_type i=0; i < str1.size(); i++)
		{
			if(str1.at(i) == letter)
			{
			secret.at(i) = letter;
			match = true;
			}
		
		}
		
		matchingoutputs(match,chances,secret, letter, str1, rightword);
		
	}
		
	
	
												
	if(rightword==str1)
	return WON;

	if(chances== 7)
	cout << "Sorry, The game is over." << endl;
		return LOST;
	
		

}




void main()

{	
	// Variables
	
	int coded= 0;
	string str1 = "";
	string star = "*";
	fin.open("input.txt");
	status;
	char cont=' ';

	
	//Main functions
	do
	{
		DisplaynameAndGame();
		GetWord(str1);
		status=PlayHangman(str1);
		
		 
		if((status== WON) || (status ==LOST))
		cout <<"Enter 'C' to continue to play " << endl;
		cin >> cont;
		



	}
	while(status==CONTINUE); 
	
system("pause");

}


So the little part in main that says enter c to continue I'm just using that to see if the enum is coming back from hangman. Which is how I know that the LOSE enum is.


Any help? I been at this for hours!!
THANKS
Is that the WHOLE code? no missing parts? if so, please add them (includes, defines, enums, etc.)
No just the functions that were important the code is long one sec.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
#include <iomanip>
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

ifstream fin;
enum gameEnum{CONTINUE,WON,LOST} status;
	
// Display name and game
void DisplaynameAndGame()
{
	cout << "Word Guessing game by Jordan Lillie" << endl;
	


}

// Get word from file
string GetWord(string& str1)  
{	
	fin >> str1;
	
	
	
	
	
	return str1;

}

//Messages for first iteration
void firstIteration(string str1, string secret)
{
	
		{ 
			cout << "Starting new game " << endl;
			cout << "My word has " << str1.length() << " characters." << endl;
			cout << "User word is " << secret << endl;
	
		}


}

//Selection for word guess
void guessTheword(string str1, int chances, string& rightword)
{	
	
	int win=1;
	char yesno=' ';
	
	if(chances <6 )																   //|| yesno =='Y')
	{
	cout << "Do you want to guess the word ,'Y' or 'N' ? " ;
	
	
	cin >> yesno;
	
	switch (yesno)
	{  
		case 'Y':
		cout << "Enter your word now: " ;
		
		cin >> rightword;
		
		if( rightword == str1)
		{
		cout << "Congratulations " << endl;
		if(win==1)
		cout << "You have won " << win << " game. " << endl;
		break;
		if(win>1)
		cout << "You have won " << win << " games. " << endl;
		win++;
		break;
		}
		else if(rightword !=str1)
		cout << "Sorry, that is not the word " << endl;
		break;
		
		case 'N': break;
	
		default : 
		cout << "Invalid choice." << endl;
			
	}
		
	}





}

// To display the the matching process
void matchingoutputs( bool match, int& chances, string secret, 
	char letter, string str1, string& rightword)
{
	if(rightword!=str1)
	{
		if(match)
		{
			cout << "The word is now " << secret << 
			'\n' << endl;
			
			guessTheword(str1, chances, rightword);
		
		
		
		}
		else if(!match)
		{
			cout << "Sorry, no occurrences of " << letter << 
			'\n' << endl;
			
		guessTheword(str1, chances, rightword);
			chances++;
		}


	}	

	

}

// Hangman function
gameEnum PlayHangman(const string str1)
{	
	
	string rightword ="";
	char choice = ' ';
	char letter=' ';
	string secret (str1.size(), '*' );
	bool match;
	int chances= 0;
	
	
	
	// First Iteration message	
	firstIteration(str1, secret);
	
	
		
	
	while(chances !=7)
	{
		match = false;  
		
		
		// User prompt
		if(str1!= rightword)
		{
		cout << "Enter a letter: " ; 
		cin >> letter;  
		}

		// Loop to match letters

		for( string::size_type i=0; i < str1.size(); i++)
		{
			if(str1.at(i) == letter)
			{
			secret.at(i) = letter;
			match = true;
			}
		
		}
		//Function for matching inputs to output messages
		matchingoutputs(match,chances,secret, letter, str1, rightword);
		
	}
		
	
	cout<< rightword;
	
	{											
	if(rightword==str1)
	return WON;
	}

	{
	if(chances== 7)
	cout << "Sorry, The game is over." << endl;
		return LOST;
	}
	{	
	if(chances!=7)
	return CONTINUE;
	}
	
	
	}





void main()

{	
	// Variables
	
	
	string str1 = "";
	string star = "*";
	fin.open("input.txt");
	status;
	char cont=' ';

	
	//Main functions
	do
	{
		DisplaynameAndGame();
		GetWord(str1);
		status=PlayHangman(str1);
		
		 
		if((status==WON) || (status == LOST))
		cout <<"Do you want to continue to play? Enter 'Y' or 'N' " << endl;
		cin >> cont;
		
		
	

	}
	while(status==CONTINUE);


system("pause");

}



Please tell me you have a good idea! I'm so stumped.
@line 210, must be gameEnum status;
Is that right though? Because I have declared a variable when I wrote my enum at the top. I'm not sure. I changed it. Why are is variable for WON in hangman not coming through to main though?
why do you use an ifstream in line 22?

EDIT: never mind... :p

EDIT2: Found it!

In the "while" of line 148, no break condition is fulfilled when you win the game.

ps: try rebuilding it within a OO design, among other things, makes following the code a lot more easier
Last edited on
Topic archived. No new replies allowed.