Program runs, but not as intended. (functions)

Working on another school assignment! This one involves replacing blocks of code with functions that perform the same task. I created the function asking for user input easily enough, but the function I created to verify that input seems to be causing problems.

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
  //Hangman
// The classic game of hangman

//Chapter 5 HW, will be modifying this code
//write function to get player guess
//write function to determine if the guess is in the secret word

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

void playerGuess();
void playerCorrect();
using namespace std;

int main()
{
    // set-up
    const int MAX_WRONG = 8;  // maximum number of incorrect guesses allowed

    vector<string> words;  // collection of possible words to guess
    words.push_back("GUESS");
    words.push_back("HANGMAN");
    words.push_back("DIFFICULT");

    srand(static_cast<unsigned int>(time(0)));
    random_shuffle(words.begin(), words.end());
    const string THE_WORD = words[0];            // word to guess
    int wrong = 0;                               // number of incorrect guesses
    string soFar(THE_WORD.size(), '-');          // word guessed so far
    string used = "";                            // letters already guessed

    cout << "Welcome to Hangman.  Good luck!\n";

    // main loop
    while ((wrong < MAX_WRONG) && (soFar != THE_WORD))
    {
        cout << "\n\nYou have " << (MAX_WRONG - wrong);
		cout << " incorrect guesses left.\n";
        cout << "\nYou've used the following letters:\n" << used << endl;
        cout << "\nSo far, the word is:\n" << soFar << endl;

        char guess;
        cout << "\n\nEnter your guess: ";
        playerGuess(); //replacement of code with function
        guess = toupper(guess); //make uppercase since secret word in uppercase
        while (used.find(guess) != string::npos)
        {
            cout << "\nYou've already guessed " << guess << endl;
            cout << "Enter your guess: ";
            cin >> guess;
            guess = toupper(guess);
        }

        used += guess;

        playerCorrect(); //replacement of code with function
    }

    // shut down
    if (wrong == MAX_WRONG)
        cout << "\nYou've been hanged!";
    else
        cout << "\nYou guessed it!";
    
    cout << "\nThe word was " << THE_WORD << endl;

    return 0;
}

//This function will take the users input
void playerGuess()
{
	char guess;
	cin >> guess;
}

//This function will test if the player's guess is in the secret word
void playerCorrect()
{
	const int MAX_WRONG = 8;  

	vector<string> words;
	words.push_back("GUESS");
    words.push_back("HANGMAN");
    words.push_back("DIFFICULT");
    srand(static_cast<unsigned int>(time(0)));
    random_shuffle(words.begin(), words.end());
    const string THE_WORD = words[0];            
    int wrong = 0;                               
    string soFar(THE_WORD.size(), '-');         
    string used = "";   
	char guess;                             


	if (THE_WORD.find(guess) != string::npos)
        {
            cout << "That's right! " << guess << " is in the word.\n";

            // update soFar to include newly guessed letter
            for (unsigned int i = 0; i < THE_WORD.length(); ++i)
			{
                if (THE_WORD[i] == guess)
				{
                    soFar[i] = guess;
				}
			}
        }
        else
        {
            cout << "Sorry, " << guess << " isn't in the word.\n";
            ++wrong;
        }
}
Last edited on
Your function playerGuess receives input, and does nothing with it. Doesn't return it. Doesn't store it anywhere. The function finishes, the input is lost.
How would I maintain the input? We're only just beginning to learn about functions, so I'm not well versed in how they work.
Functions can send a value back to the caller.
1
2
3
4
5
6
char playerGuess()
{
	char userInput;
	cin >> userInput;
       return userInput;
}



1
2
3
        char guess;
        cout << "\n\nEnter your guess: ";
        guess = playerGuess(); //replacement of code with function 
That seems to have worked, though I think there is still something wrong with the other function. I think it's a logic error, but I just don't quite get it. I can't visualize the solution
If you need a hint on how to say what the problem is, think about what you want the program to do that it doesn't do, and say that. Alternatively, think about what the program does that you don't want it to do, and say that.
I think the problem lies within the playerCorrect function. I think the guess value might be where the problem lies.

https://imgur.com/a/8oNsp This is the program running. There is a strange blank spot where a letter should be, which leads me to believe that there's something wrong with 'guess'. There's also something wrong with the verification of whether or not the letters are correct, as none of the letters seem to be considered correct.
From your function, playerCorrect .

1
2
char guess;                             
if (THE_WORD.find(guess) != string::npos)


What do you think the value of guess is in that second line? Given that it is created in that first line there, and never set to anything, what do you expect its value to be?
Topic archived. No new replies allowed.