这两种循环选择有何区别,对于小弟我的程序第一种循环选择可以,而第二种不可以,这是为啥?求

这两种循环选择有何区别,对于我的程序第一种循环选择可以,而第二种不可以,这是为啥?求求高手指教
void main() 
{
int i = 0;
char selectGame;
initialize_Poker_generator();
do
{
if( i == 0 ) startPlayTheGame();
else     playTheGameArgin();
printf("Play the next game argin:( Y/N )?\n");
i++;
}while( getchar() == 'Y' || getchar() == 'y' );

do
{
if( i == 0 ) startPlayTheGame();
else     playTheGameArgin();
printf("Play the next game argin:( Y/N )?\n");
scanf("%c",&selectGame);
i++;
}while( selectGame == 'Y' || selectGame == 'y' );
}

这两种循环选择有何区别,对于我的程序第一种循环选择可以,而第二种不可以,这是为啥?求求高手指教


------解决方案--------------------
你需要的是fflush(stdin)
scanf路遇回车,请看楼下分解
------解决方案--------------------
我测试了一下,第一种循环有问题吧,getchar()应该是运行了两次,如下代码输入'y'时,就结束循环了,
输出:1,空格
显然不是你要的功能
# include <stdio.h>

int main()
{
int i = 0;
char ch;
do
{
i++;
}while((ch = getchar()) == 'Y' 
------解决方案--------------------
 (ch = getchar()) == 'y');

printf("%d,%c\n", i, ch);
return 0;
}


------解决方案--------------------
区别在于,第一种循环,其实也有错误。他调用了两次getchar(),第二个getchar()其实是把回车给吃掉了。第二种循环,他没有吃掉回车,导致下次循环的时候,读取到的字符将是回车,也就是‘\n'。 解决的方法可以刷新一下缓冲区。或者多吃掉那个回车符就行了。
------解决方案--------------------
第一种循环提取两次字符,第二种循环只提取一个字符
其实第一种循环,第一个字符是输入的Y,为真,继续
------解决方案--------------------
后的第二个getchar不执行;如果输入的非Y,第二个getchar得到的是“回车”。
我觉得你输入Y能成功,输入y就应该退出循环了