C语⾔scanf执⾏时被跳过运⾏到第⼆次开始游戏时,发现GameJudge函数中的scanf⽆法从键盘中输⼊数据
这种情况的出现是因为⽤户在输⼊结束时都会敲⼀下回车键才能让程序继续执⾏,
但是,每次printf会从⽤户输⼊缓冲区取出⽤户输⼊的内容,这样就会在缓冲区留下回车键,
下⼀次输⼊如果是获取⼀个字符,就会将缓冲区剩余的回车键取出。
#include<stdio.h>
#include<ctype.h>
#include <stdlib.h>
#include <time.h>
#include<windows.h>
//定义全局变量
int InputNumber = 0;//输⼊的数字
char Game;//输⼊的指令
int s = 0;//游戏循环的控制
//输⼊是否开始游戏的指令
int GameJudge(void)
{
printf("输⼊Y开始游戏\n输⼊N退出游戏\n");//不⽤区分⼤⼩写
printf("请输⼊指令:");
setbuf(stdin, NULL);//使stdin输⼊流由默认缓冲区转为⽆缓冲区
scanf("%c",&Game);//
//fflush(stdin);//清除缓冲区这个貌似没有⽤,⽤setbut代替了
Game = toupper(Game);
switch(Game)
{
case 'Y' : s = 1;break;
case 'N' : s = 0;break;
default : s = 0;break;
}
return s;
}
//判断输⼊的数字是否符合要求
int JudgeNumber( int x)
{
int n;
if((x>=0)&&(x<=9)){n = 1;}
else{n = 0;}
return n;
}
//产⽣随机数,
int RandomNumber(void)
{
int number;
srand((unsigned) time(NULL)); //⽤时间做种,每次产⽣随机数不⼀样
number = rand() % 10; //产⽣0-100的随机数
return number;
}
//输⼊数字,并判断是否符合要求
int Input(void)
{
do
{
printf("请输⼊你的答案:");
scanf("%d",&InputNumber);
}
while(!JudgeNumber(InputNumber));
return InputNumber;
}
//游戏的主体
int main()
{
int i = 0;
int number;//定义随机数
int Score = 1;//得分计算
int j = 1;
number = RandomNumber();
s = GameJudge();
while(s)//游戏的循环体
{
InputNumber = Input();
do
{
if(InputNumber == number)
{
j = 0;
}
else
{
printf("你猜错了!\n请重新输⼊\n");
Score ++;
InputNumber = Input();
}
}
while(j);
switch(Score)
{
case 1 : printf("你真是我肚⼦⾥的蛔⾍\n"); break; case 2 : printf("你还真是有点⼆呀\n" ); break;
case 3 : printf("哼,不理你了\n" ); break;
default : printf("你就是个⼤笨蛋\n" ); break;
}
Score = 1;//⼀轮游戏结束,初始化Scorec语言scanf能输入中文吗
system("cls");//清屏
s = GameJudge();
}
system("pause");
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论