1

I have tried looking for an answer and fixing this myself but I have failed. I'm attempting to create a program that executes a letter guessing game. Please be advised that this IS homework. However, I'm not looking for answers, I am looking for insight. After executing this program I'm getting the error "The variable 'solution' is being used without being initialized C++.

Any ideas?

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #define MAXGUESSES 4
    void GuessItRules();
    int PlayOneGame(char);
    char GetTheLetter();
    int IsAWinner(char, char);
    void CompareTheLetters(char guess, char letter);



    int main()
    {
    //declare additional variables
    //declare FILE pointer
    FILE *inp;
    int numGames, i = 0;
    //letter from file
    char letter;
    //variable for the return of the PlayOneGame function
    int didYouWin;


    char solution;


    //display instructions
    GuessItRules();
    //connect to the file HINT: use fopen
    inp = fopen("letterinput.txt", "r");

    //get number of games to play
    printf("How many games? (1 to 5): ");
    scanf("%d", &numGames);

    //this for loop will allow the player to play more than one game
    //without recompiling
    for (i = 0; i < numGames; i++)
    {
        //get a letter from file - use fscanf
        fscanf(inp, "%c", &letter);
        //print the letter back onto the screen, just to test
        //printf("\nThe letter is %c\n", letter);

        //Play one game (Call PlayOneGame function)
        //remember the function has an int return type
        printf("Let's play game %d\n", i + 1);
        PlayOneGame(solution);
        //tell the player if they have won or lost (test the variable didYouWin)

      }

      //close file
    fclose(inp);
    return 0;
}




    char GetTheLetter()
    {
    char guess;
    printf("\nMake a guess (CAPITAL LETTERS ONLY):");
    scanf("%c", &guess);
    return guess;
    }

    void CompareTheLetters(char guess, char letter)
    {
    if (guess == letter)
    {
        printf("\nThe Letter and the guess are the same (%c)\n",guess);
    }
    else 
    if (guess < letter)
    {
        printf("The letter comes after your guess (%c)", guess);
    }
    else 
    if (guess > letter)
    {
        printf("The letter comes before your guess (%c)", guess);
    }

    }

    int IsAWinner(char guess, char letter)
    {
    if (guess == letter)
    {
        return 1;
    }
    else
        if (guess < letter)
        {
            return 0;
        }
        else
            if (guess > letter)
            {
                return 0;
            }
    }

    int PlayOneGame(char solution)
    {
    int numGuesses = 0;
    //SHOULD BE INITIALZED TO 1
    int winOrLose = 1;
    // user guess

    char guess = 0;

    //char solution = 0;
    char letter = 0;


    //As long as the user  has not used up the maximum number
    //of guesses and has not guessed correctly 
    //the game will continue using this while loop
    while (numGuesses < MAXGUESSES && winOrLose == 1)
    {
        printf("Getting guess number %d\n", numGuesses+1);
        //function call to GetTheletter - returns to guess variable
        GetTheLetter();
        //function call to IsAWinner - returns to winOrLose variable (0 or 1)
        IsAWinner(guess, letter);
        //function call to CompareTheLetters - gives the user  a message
        CompareTheLetters(guess, letter);
        //update counter for number of guesses used
        numGuesses = numGuesses + 1;

    }

    return winOrLose;  //(0 or 1)

    }

    //add the other function definitions

    void GuessItRules()
    {
    printf("Welcome to the Letter Guessing Game\n");
    printf("\nFirst, you will enter the number of games you want 
    to play (1 - 5      games)\n");
    printf("For each game you will have 4 chances to guess each letter\n");
    printf("Let's begin:\n");
    }
David Hoelzer
  • 15,862
  • 4
  • 48
  • 67
TheJr
  • 51
  • 7
  • Read the warning. It's pretty explicit. What is the `solution` variable supposed to do? – John3136 Feb 22 '16 at 01:13
  • Thanks for the quick answer. I added "char solution" to initialise the "PlayOneGame(Solution)". I've been following the error messages for some time and adding where it says I have an error. It was the only way I and my basic experience told me too. Thanks! – TheJr Feb 22 '16 at 01:26
  • 1
    Possible duplicate of [What happens to a declared, uninitialized variable in C? Does it have a value?](http://stackoverflow.com/questions/1597405/what-happens-to-a-declared-uninitialized-variable-in-c-does-it-have-a-value) – Weak to Enuma Elish Feb 22 '16 at 02:25

1 Answers1

1

You are receiving that warning because you declare char solution and then pass it by value to the function PlayOneGame(char solution) without ever initializing it. Since you are passing it in this way, you are implying that you intend to use it as a constant (not a const... I mean that you are passing only the value, not a reference to it, so it's not really mutable...) within the function. As it stands, you don't use it at all, but this is the case of the message.

David Hoelzer
  • 15,862
  • 4
  • 48
  • 67
  • Thank you for breaking down and helping me get to the issue. However, it was my understanding that I had to initialise solution with char solution to define the solution in PlayOneGame(solution). – TheJr Feb 22 '16 at 01:31
  • @TheJr your function uses pass-by-value, which means that the function receives a copy of the argument. To do what you describe requires to use *pass by reference* . – M.M Feb 22 '16 at 01:47
  • How would I do that, exactly? &Thevalue? – TheJr Feb 22 '16 at 01:50
  • You could pass the address of `solution`. The prototype would be `PlayOneGame(char *var)` and the call would be `PlayOneGame(&solution)`. Do some reading on pointers. – David Hoelzer Feb 22 '16 at 11:46