user1937219
user1937219

Reputation: 11

C random number producing garbage value

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main() {

    srand(time(0)); 

    int random = 0, guess, guesses = 1;
    random = rand() % 100 + 1;
    printf("The number has been generated. Input 0 to quit.\n");
    do {
        scanf("%d", &guess); //takes user input for guess
        if (guess > random && guess != 0)
            printf("Lower!\n");
        else
        if (guess < random && guess != 0)
            printf("Higher!\n");
        else
        if (guess == random) {
            printf("Bingo!");
            return 0;
        } else
        if (guess == 0) {
            printf("Thanks for playing, the number was %d\n", &random);
            return 0;
        }
        guesses++;
    } while (guesses != 6); //maximum of 5 guesses

    printf("Thanks for playing, the number was %d\n", &random);

    return 0;
}

Whenever I display the random variable when it has already generated a number a garbage value will be outputted. But the code snippet works of checking the comparison between the guess and the random number, I just can't seem to output the random number correctly.

Upvotes: 0

Views: 243

Answers (2)

chqrlie
chqrlie

Reputation: 144740

You should pass the value of random instead of its address:

printf("Thanks for playing, the number was %d\n", random);

Note also that you should check the return value of scanf(): if you type a letter, the program will have undefined behavior, it may exit after iterating 5 times, or iterate forever or do something else entirely...

Here is an improved version:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
    int random, guess, guesses;
    srand(time(0)); 

    random = rand() % 100 + 1;
    printf("The number has been generated. Input 0 to quit.\n");
    for (guesses = 0; guesses < 5; guesses++) {
        // take user input for guess
        if (scanf("%d", &guess) != 1 || guess == 0)
            break;

        if (guess > random) {
            printf("Lower!\n");
        } else
        if (guess < random) {
            printf("Higher!\n");
        } else {
            printf("Bingo!\n");
            return 0;
        }
    }

    printf("Thanks for playing, the number was %d\n", random);

    return 0;
}

Upvotes: 0

haccks
haccks

Reputation: 106012

%d in printf expects an argument of int data type. You are passing int * data type (&random).
Remove & before random in last two printfs.

printf("Thanks for playing, the number was %d\n", random);

Upvotes: 4

Related Questions