用C語言實現猜數字

如何用C語言寫出一個猜數字遊戲,供大傢參考,具體內容如下

首先調用頭文件

/***調用頭文件***/ 
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h> 
/***調用頭文件***/

再者定義函數

/**定義函數**/ 
void start();//開始函數 
void low();//低級 
void mediate();//中級 
void high();//高級 
void res();//重啟函數 
void chooce();//選擇函數 
void help();//查看幫助 
void name_set();//姓名詢問 
int main(void);//主函數 
/**定義函數**/

start()函數,主要是進行選擇進入,代碼如下

void start(){//開始函數 
 printf("***************************\n");
 printf("* 1.進行猜數字   *\n");
 printf("* 2.退出猜數字   *\n");
 printf("* 3.選擇  幫助   *\n");
 printf("***************************\n\n");
 
 /*設置選擇*/ 
 int c;
 printf("請選擇:");
 scanf("%d",&c); 
 
 switch(c){
  case 1:
   chooce();
   break;
  case 2:
   printf("謝謝您!\n");
   break;
   exit(0);
  case 3:
   help();
   break;
  default:
   printf("請輸入正確的數字:\n");
   break;
 }
 /*設置選擇*/ 
 
}

name_set()函數主要是詢問一下遊玩者的名字,再輸出一下名字,畢竟是個遊戲供來娛樂嘛

void name_set(){//問候函數 
 char name[10];
 printf("您好,您叫什麼?輸入您的姓名:");
 gets(name);
 printf("%s,歡迎來到猜數字遊戲\n\n",name);
}

help()函數純純就是提示幫助

void help(){//幫助函數 
 printf("\t1.低級范圍在300以內,共5次機會\n");
 printf("\t2.中級范圍在300-1000以內,共10次機會\n");
 printf("\t3.高級在1000以上,共20次機會\n");
 start();//返回開始函數,並不運行問候函數 
}

chooce()函數,主要是進行選擇遊戲等級

void chooce(){//選擇等級 
 printf("***************************\n");
 printf("* 1.選擇低級   *\n");
 printf("* 2.選擇中級   *\n");
 printf("* 3.選擇高級   *\n");
 printf("***************************\n");
  
 int dj;
 printf("請選擇等級:");
 scanf("%d",&dj);//設置等級 
  
 /*判定選擇等級*/ 
 if(dj==1){
  low();
 }
 else if(dj==2){
  mediate();
 }
 else if(dj==3){
  high();
 }
 else{
  printf("請輸入正確的數字,我們即將返回程序!\n");
  chooce();
 }
 /*判定選擇等級*/
}

接下來就是主要的函數瞭,是遊戲內容和邏輯

簡單來說,低級中級高級的代碼邏輯是一樣的,都是運用stdlib.h裡的rand()函數抽取隨機數值,然後與輸入的guess對比,可以看出來,在while裡運行,輸入一次做一次對比,如果正確times+1並結束循環,如果不正確,提示錯誤並返回while運行,直到times超過那個數值,跳出循環。
在下面可以看一下基本模板(裡面數值用拼音代替)

void dengji(){
 int sb;
 srand(time(NULL));//調用rand函數 
 printf("輸入一個范圍整數:");
 scanf("%d",&sb);//獲取范圍值 
 
 if(//表達式代取數值對比){
  printf("太大瞭建議您玩中級!\n");
  printf("請再次輸入\n");
  low();
 }
 
 int num=rand() % ("%d"+1,sb);//獲取隨機整數 
 int times=0;//設置初始次數 
 
 while(times<n){//循環判定 
  int guess;
  printf("輸入數字:");//獲取輸入值 
  scanf("%d",&guess);

  times+=1;//次數增加 
  
  /***與隨機值比較***/ 
  if(guess==num){
   break;//正確結束循環 
  }
  else if(guess>num){
   printf("猜大瞭!\n"); 
  }
  else{
   printf("猜小瞭!\n");
  }
  /***與隨機值比較***/ 
  
 }
 
 if(times<n){
  printf("猜對瞭!\n");//正確結果 
  printf("您一共猜瞭%d次",times);
 }
 else{
  printf("對不起,猜錯瞭!數字是%d。\n",num);
  printf("您一共猜瞭%d次\n",times);//錯誤結果 
 }
}

然後可以看一下代碼

void low(){//低級 
 int sb;
 srand(time(NULL));//調用rand函數 
 printf("輸入一個范圍整數:");
 scanf("%d",&sb);//獲取范圍值 
 
 if(sb>300){
  printf("太大瞭建議您玩中級!\n");
  printf("請再次輸入\n");
  low();
 }
 
 int num=rand() % ("%d"+1,sb);//獲取隨機整數 
 int times=0;//設置初始次數 
 
 while(times<5){//循環判定 
  int guess;
  printf("輸入數字:");//獲取輸入值 
  scanf("%d",&guess);

  times+=1;//次數增加 
  
  /***與隨機值比較***/ 
  if(guess==num){
   break;//正確結束循環 
  }
  else if(guess>num){
   printf("猜大瞭!\n"); 
  }
  else{
   printf("猜小瞭!\n");
  }
  /***與隨機值比較***/ 
  
 }
 
 if(times<5){
  printf("猜對瞭!\n");//正確結果 
  printf("您一共猜瞭%d次",times);
 }
 else{
  printf("對不起,猜錯瞭!數字是%d。\n",num);
  printf("您一共猜瞭%d次\n",times);//錯誤結果 
 }
}

void mediate(){//中級 
 int sb;
 srand(time(NULL));//調用rand函數 
 printf("輸入一個范圍整數:");
 scanf("%d",&sb);//獲取范圍值 
 
 if(sb<300){
  printf("太小瞭建議您玩低級!\n");
  printf("請再次輸入\n");
  mediate();
 }
 else if(sb>1000){
  printf("太大瞭建議您玩高級!\n");
  printf("請再次輸入\n");
  mediate();
 }
 
 int num=rand() % ("%d"+1,sb);//獲取隨機整數 
 int times=0;//設置初始次數 
 
 while(times<10){//循環判定 
  int guess;
  printf("輸入數字:");//獲取輸入值 
  scanf("%d",&guess);

  times+=1;//次數增加 
  
  /***與隨機值比較***/ 
  if(guess==num){
   break;//正確結束循環 
  }
  else if(guess>num){
   printf("猜大瞭!\n"); 
  }
  else{
   printf("猜小瞭!\n");
  }
  /***與隨機值比較***/ 
  
 }
 
 if(times<10){
  printf("猜對瞭!\n");//正確結果 
  printf("您一共猜瞭%d次",times);
 }
 else{
  printf("對不起,猜錯瞭!數字是%d。\n",num);
  printf("您一共猜瞭%d次\n",times);//錯誤結果 
 }
}

void high(){//高級 
 int sb;
 srand(time(NULL));//調用rand函數 
 printf("輸入一個范圍整數:");
 scanf("%d",&sb);//獲取范圍值 
 
 if(sb<1000){
  printf("太小瞭,建議您退出遊戲!\n");
  high(); 
 }
 
 int num=rand() % ("%d"+1,sb);//獲取隨機整數 
 int times=0;//設置初始次數 
 
 while(times<20){//循環判定 
  int guess;
  printf("輸入數字:");//獲取輸入值 
  scanf("%d",&guess);

  times+=1;//次數增加 
  
  /***與隨機值比較***/ 
  if(guess==num){
   break;//正確結束循環 
  }
  else if(guess>num){
   printf("猜大瞭!\n"); 
  }
  else{
   printf("猜小瞭!\n");
  }
  /***與隨機值比較***/ 
  
 }
 
 if(times<20){
  printf("猜對瞭!\n");//正確結果 
  printf("您一共猜瞭%d次",times);
 }
 else{
  printf("對不起,猜錯瞭!數字是%d。\n",num);
  printf("您一共猜瞭%d次\n",times);//錯誤結果 
 }
}

res()函數可以理解為詢問返回遊戲,我是在return games的基礎上縮寫的,畢竟遊戲不能隻有一次,在裡面做一個邏輯運算,並返回其他函數

void res(){//詢問是否重新再來 
 printf("\n還要在玩一遍嗎?\n1.是的 2.退出。");
 int s;
 scanf("%d",&s);
 
 /*進行選擇*/ 
 if(s==1){
  chooce();
 }
 else if(s==2){
  printf("謝謝您!\n"); 
  exit(0);//退出程序 
 }
 else{
  printf("請輸入正確的數字!\n");
  res();
 }
 /*進行選擇*/
 
 return res();//將res函數返回main函數 
} 

main()函數主要是做瞭一個調用,調用前面start,name_set,chooce,res等函數

int main(){
 name_set();//問候 
 
 start();//執行選擇

 int yes=1;//設置重啟值,調用res函數 
 if(yes==1){
   res();
  }
}

到最後可以看一下所有代碼

/***調用頭文件***/ 
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<string.h> 
/***調用頭文件***/

/**定義函數**/ 
void start();//開始函數 
void low();//低級 
void mediate();//中級 
void high();//高級 
void res();//重啟函數 
void chooce();//選擇函數 
void help();//查看幫助 
void name_set();//姓名詢問 
int main(void);//主函數 
/**定義函數**/

void start(){//開始函數 
 printf("***************************\n");
 printf("* 1.進行猜數字   *\n");
 printf("* 2.退出猜數字   *\n");
 printf("* 3.選擇  幫助   *\n");
 printf("***************************\n\n");
 
 /*設置選擇*/ 
 int c;
 printf("請選擇:");
 scanf("%d",&c); 
 
 switch(c){
  case 1:
   chooce();
   break;
  case 2:
   printf("謝謝您!\n");
   break;
   exit(0);
  case 3:
   help();
   break;
  default:
   printf("請輸入正確的數字:\n");
   break;
 }
 /*設置選擇*/ 
 
}

void name_set(){//問候函數 
 char name[10];
 printf("您好,您叫什麼?輸入您的姓名:");
 gets(name);
 printf("%s,歡迎來到猜數字遊戲\n\n",name);
}

void help(){//幫助函數 
 printf("\t1.低級范圍在300以內,共5次機會\n");
 printf("\t2.中級范圍在300-1000以內,共10次機會\n");
 printf("\t3.高級在1000以上,共20次機會\n");
 start();//返回開始函數,並不運行問候函數 
}

void chooce(){//選擇等級 
 printf("***************************\n");
 printf("* 1.選擇低級   *\n");
 printf("* 2.選擇中級   *\n");
 printf("* 3.選擇高級   *\n");
 printf("***************************\n");
  
 int dj;
 printf("請選擇等級:");
 scanf("%d",&dj);//設置等級 
  
 /*判定選擇等級*/ 
 if(dj==1){
  low();
 }
 else if(dj==2){
  mediate();
 }
 else if(dj==3){
  high();
 }
 else{
  printf("請輸入正確的數字,我們即將返回程序!\n");
  chooce();
 }
 /*判定選擇等級*/
}

void low(){//低級 
 int sb;
 srand(time(NULL));//調用rand函數 
 printf("輸入一個范圍整數:");
 scanf("%d",&sb);//獲取范圍值 
 
 if(sb>300){
  printf("太大瞭建議您玩中級!\n");
  printf("請再次輸入\n");
  low();
 }
 
 int num=rand() % ("%d"+1,sb);//獲取隨機整數 
 int times=0;//設置初始次數 
 
 while(times<5){//循環判定 
  int guess;
  printf("輸入數字:");//獲取輸入值 
  scanf("%d",&guess);

  times+=1;//次數增加 
  
  /***與隨機值比較***/ 
  if(guess==num){
   break;//正確結束循環 
  }
  else if(guess>num){
   printf("猜大瞭!\n"); 
  }
  else{
   printf("猜小瞭!\n");
  }
  /***與隨機值比較***/ 
  
 }
 
 if(times<5){
  printf("猜對瞭!\n");//正確結果 
  printf("您一共猜瞭%d次",times);
 }
 else{
  printf("對不起,猜錯瞭!數字是%d。\n",num);
  printf("您一共猜瞭%d次\n",times);//錯誤結果 
 }
}

void mediate(){//中級 
 int sb;
 srand(time(NULL));//調用rand函數 
 printf("輸入一個范圍整數:");
 scanf("%d",&sb);//獲取范圍值 
 
 if(sb<300){
  printf("太小瞭建議您玩低級!\n");
  printf("請再次輸入\n");
  mediate();
 }
 else if(sb>1000){
  printf("太大瞭建議您玩高級!\n");
  printf("請再次輸入\n");
  mediate();
 }
 
 int num=rand() % ("%d"+1,sb);//獲取隨機整數 
 int times=0;//設置初始次數 
 
 while(times<10){//循環判定 
  int guess;
  printf("輸入數字:");//獲取輸入值 
  scanf("%d",&guess);

  times+=1;//次數增加 
  
  /***與隨機值比較***/ 
  if(guess==num){
   break;//正確結束循環 
  }
  else if(guess>num){
   printf("猜大瞭!\n"); 
  }
  else{
   printf("猜小瞭!\n");
  }
  /***與隨機值比較***/ 
  
 }
 
 if(times<10){
  printf("猜對瞭!\n");//正確結果 
  printf("您一共猜瞭%d次",times);
 }
 else{
  printf("對不起,猜錯瞭!數字是%d。\n",num);
  printf("您一共猜瞭%d次\n",times);//錯誤結果 
 }
}

void high(){//高級 
 int sb;
 srand(time(NULL));//調用rand函數 
 printf("輸入一個范圍整數:");
 scanf("%d",&sb);//獲取范圍值 
 
 if(sb<1000){
  printf("太小瞭,建議您退出遊戲!\n");
  high(); 
 }
 
 int num=rand() % ("%d"+1,sb);//獲取隨機整數 
 int times=0;//設置初始次數 
 
 while(times<20){//循環判定 
  int guess;
  printf("輸入數字:");//獲取輸入值 
  scanf("%d",&guess);

  times+=1;//次數增加 
  
  /***與隨機值比較***/ 
  if(guess==num){
   break;//正確結束循環 
  }
  else if(guess>num){
   printf("猜大瞭!\n"); 
  }
  else{
   printf("猜小瞭!\n");
  }
  /***與隨機值比較***/ 
  
 }
 
 if(times<20){
  printf("猜對瞭!\n");//正確結果 
  printf("您一共猜瞭%d次",times);
 }
 else{
  printf("對不起,猜錯瞭!數字是%d。\n",num);
  printf("您一共猜瞭%d次\n",times);//錯誤結果 
 }
}

void res(){//詢問是否重新再來 
 printf("\n還要在玩一遍嗎?\n1.是的 2.退出。");
 int s;
 scanf("%d",&s);
 
 /*進行選擇*/ 
 if(s==1){
  chooce();
 }
 else if(s==2){
  printf("謝謝您!\n"); 
  exit(0);//退出程序 
 }
 else{
  printf("請輸入正確的數字!\n");
  res();
 }
 /*進行選擇*/
 
 return res();//將res函數返回main函數 
}

int main(){
 name_set();//問候 
 
 start();//執行選擇

 int yes=1;//設置重啟值,調用res函數 
 if(yes==1){
   res();
  }
}

這裡函數的順序可以打亂,因為我們在前面是聲明過一遍函數的,並不需要函數的順序,因為不聲明的話,很難去找到想用的函數!!!

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: