View Single Post
symantec11_76

 
Member Since: Jan 18, 2008
Posts: 5
symantec11_76 is on a distinguished road

symantec11_76 is offline
I wrote a program that should work just fine. I compiled the same program on a Windows compiler and the program works great. However, my GCC compiler seems to be having a problem with the character type scanf within an if statement which is also within a do while loop. My default GCC version is 4.0. Anyone have any ideas. The program is below with a comment on which scanf is causing the problem. When the program gets to that scanf, it just continues on by without waiting for user input of y or n.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//Library stdlib.h needed for srand. Library time.h needed for time randomization.

main ()

{
int iRandom=0,iGuess=0,iGuessMade=0;
char cExit='\0';
//Data type calls - iRandom is random value, iGuess is for users guess, iGuessMade to count guesses and cExit is for y or n to play again.

srand(time(NULL));
//srand call for rand to randomize each time

iRandom = (rand() % 10)+1;
//Randomize number between 0 and 999, then add 1 in order to assign values between 1 and 1000.
//Randomize before first loop in order to keep same value until guessed right.

do
{
printf("\n\n************************************** *");
printf("\n* I have a number between 1 and 10. *");
printf("\n* Can you guess my number? *");
printf("\n* Please type your guess: *");
printf("\n***************************************\ n\n");
scanf("%d", &iGuess);
iGuessMade++; //iGuessMade counts number of times guessed.

if (iGuess == iRandom) //Test if guess is the same as random value.
{

printf("\n\n************************************** ********");
printf("\n* Excellent! *");
printf("\n* You guessed the right number! *");
printf("\n* That was guess number %d. Can you beat it? *", iGuessMade);
printf("\n* Would you like to play again (y or n)? *");
printf("\n**************************************** ******\n\n");
scanf("%c", &cExit); //This is the scanf that is not working
if (toupper (cExit) == 'Y'){ //toupper to accept upper or lower case.
iRandom = (rand() % 10)+1; //Randomize again for new value in next game if y chosen.
iGuessMade=0; //Resets number of guesses if user plays again.
}
}

else
{
if (iGuess > iRandom)
{

printf("\n\n************************************** ");
printf("\n* %d is too High! Try Again. *", iGuess);
printf("\n* That was guess number %d. *", iGuessMade);
printf("\n**************************************\n \n");
} //Test if iGuess is too high.

else
{

printf("\n\n************************************** ");
printf("\n* %d is too Low! Try Again. *", iGuess);
printf("\n* That was guess number %d. *", iGuessMade);
printf("\n**************************************\n \n");
} //Output if iGuess is too low, only other option if previous tests fail.
}
} while (toupper (cExit) != 'N');
//Test if cExit is not equal to N. Toupper compensates for upper or lower case input. If cExit is not N, then game replays.

return 0;
}

Macbook
OS X 10.5.5
XCode 3.1.2
QUOTE Thanks