La lecture de caractère avec scanf()

Ce code est pour jeu de craps.

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <time.h>
int roll_dice(void);
bool play_game(void);
int main()
{
int i, ch,win = 0,lose = 0;
bool flag;
srand((unsigned)time(NULL));
do
{
flag = play_game();
if(flag)
{
printf("You win!");
win++;
}
else
{
printf("You lose!");
lose++;
}
printf("\n\nPlay again(Y/N)? ");
scanf("%c", &ch);
ch = getchar();
printf("\n");
}while(ch == 'Y' || ch == 'y');
printf("\nWins: %d   Losses: %d",win,lose);
return 0;
}
int roll_dice(void)
{
return rand()%6 + rand()%6 + 2;
}
bool play_game(void)
{
int sum = roll_dice();
printf("You rolled: %d\n", sum);
if(sum == 7 || sum == 11)
return 1;
else if(sum == 2 || sum == 3 || sum == 12)
return 0;    
else
{
int point = sum;
printf("Your point is: %d\n", point);
do
{
sum = roll_dice();
printf("You rolled: %d\n", sum);
if(sum == 7)
return 0;            
}while(point != sum);
return 1;
}                    
}

J'ai un problème uniquement avec de l'extrait de code

 printf("\n\nPlay again(Y/N)? ");
scanf("%c", &ch);
ch = getchar();
printf("\n");

J'ai utilisé, car il se termine après une itération quelle que soit la saisie de l'utilisateur Y ou N. J'ai pensé que je fais de mal en plaçant ch = getchar() de manger jusqu'à \n, je l'ai enlevé et mis un espace avant le spécificateur de conversion et l'a remplacé par " %c" qui n'a pas de travail.Quand j'ai remplacé les indicateurs de conversion par %d il fonctionne très bien.

Est quelque chose va mal avec cette?

J'ai visité cette post et il dit la même chose que j'ai fait.

Jeu de le craps?
Jeu de qui trône..
"La lecture de caractère avec scanf()" - non, Non, jamais! Pour cela, on peut utiliser fgetc(stdin) à la place. En fait, si jamais vous envisagez d'utiliser scanf(), alors ne le faites pas.
oui, je ne poste pas de question parce qu'il n'a rien à faire avec elle.
BTW, si vous obtenez une valeur dans un personnage ( %c ), alors il ne devrait pas ajouter un \n. \n est un autre personnage par lui-même et que vous êtes aller chercher seul. Mais là encore, mon C++ est plus rouillé que le Titanic.

OriginalL'auteur haccks | 2013-07-05