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;//一輪游戲結束,初始化Score
		system("cls");//清屏
		s = GameJudge();
	}
	system("pause");

}



免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM