稍改了下你的代码
#include
#include
#include
#include
void main(void)
{
int suijishu, shu, cishu;
char yn;
srand(time(NULL));
printf("这是一个猜数字游戏,请猜0-100之间的数字。\n");
do
{
suijishu = rand()%100;//将产生的随机数放在循环里面,这样每一次玩的话,数据都会不一样的
printf("随机数:%d\n", suijishu);//打印随机数,可去掉
cishu = 0;//初始化次数
do
{
printf("请输入要猜的数:");
scanf("%d", &shu);
cishu++;
if (shu > suijishu)
{
printf("太大了\n");
}
if (shu < suijishu)
{
printf("太小了\n");
}
if (shu == suijishu)
{
printf("正确!!\n");
}
} while (shu != suijishu);
printf("你一共用了%d次。。\n",cishu);
printf("是否再玩一次??Y/N\n");
fflush(stdin);//标准清楚缓存函数
scanf("%c",&yn);
} while (toupper(yn) == 'Y');
getch();
}
楼上已经把原因说的很清楚了,我就说说处理方法
第一种用fflush(stdin)清除缓存,也就是清楚缓存中上一次输入残留下来的回车键
第二种scanf(" %c", &yn);在%c前加上一个空格
第三种在scanf("%c", &yn);前加getchar();用于吃掉回车键,避免被%c接收
我用的是第一种最标准的方法
printf("是否再玩一次??Y/N\n");
scanf("%c",&yn);
中间加上一句getchar();
变成
printf("是否再玩一次??Y/N\n");
getchar();
scanf("%c",&yn);
这样能防止因上次输入数后,回车留在缓冲区而影响下次输数问题
这个是因为换行符'\n'也是一个字符被捕获了所以yn始终是'\n'不可能是'Y'。所以第二个while的判断不起作用。