I wrote the below function :
typedef enum {GREEN,BLACK, WHITE} color;
void StartGame(Piece board[8][8])
{
color currentPlayer=WHITE;
char location[2];
int gameover=1;
while(gameover)
{
printf("%dn",currentPlayer);
if(currentPlayer==WHITE)
printf(BOLDWHITE"White: Please select a piece:n");
else
printf(BOLDBLACK"Black: Please select a piece:n");
printf("%dn",currentPlayer);
scanf("%s",location);
printf("%dn",currentPlayer);
if(currentPlayer==WHITE)
currentPlayer=BLACK;
else
currentPlayer=WHITE;
}
}
I print the currentPlayer on any level to see what’s going on -> here what I get:
2 White: Please select a piece: 2 a1 0 2 White: Please select a piece: 2
Why the current player is 0 after scanf? I didn’t touch it.
Advertisement
Answer
The buffer location has only room for 2 characters and scanf puts an extra NUL character at end. Therefore you have a stack corruption issue. Just give more room to location, for example:
char location[8];
EDIT
Since you just want to read a string, I recommend you using fgets, which allows you to limit the number of read characters from the input string. Thus, my code would look like this:
char location[8]; ... fgets(location, sizeof(location), stdin); //instead of scanf, fgets reads at most one less than buffer's size characters.
You only have to worry about the fact that fgets puts a final end line character (n) at the end, but this should not be a deal if you just process the 2 first characters of the string.