本系列文章是配合我釋出的《C++程式設計基礎》系列視訊教程的知識點總結和補充。
在這一節課裡,我們綜合之前課程的知識點來實作了一個猜數字的小遊戲。首先讓機器随機生成一個1到100之間的整數,然後在輸出端提示使用者輸入一個整數來猜猜這個随機數是多少,獲得輸入後要先檢測輸入的内容是否是整數,不是的話要重新輸入。接到合格的整數輸入後,如果輸入的數字與生成的随機數一緻,則可提示成功後退出程式,否則程式會提示随機數比輸入的數是高了還是低了,然後讓使用者再次輸入猜測的數字,直到猜中為止。用流程圖來描述這一過程的話,如下圖:
随機數的生成需要用到3個函數rand, srand和time,time(0)函數傳回一個以秒為機關的系統時間,這個秒數是從1970年1月1日午夜0時開始計算的,用它作為srand的參數時,系統可能會警告隐式轉換失去整數精度的問題,可以用強制類型轉換來解決,即在time(0)前加上(int)或者(unsigned int)。srand是為了生成随機數的種子,不同的種子,才能“長出”不同的随機數,如果不在使用rand函數之前調用srand函數,每次産生的随機數将不會發生變化。
srand((int)time(0));
為了生成一個1到100之間的随機數,在調用rand函數後讓得到的值用100來取餘,使值在0到99之間,再做加1操作即可。
int randomInt = rand()%100+1;
由于這裡我用的開發工具是Xcode,在加入了預處理編譯指令#include 後就不用再包含這幾個函數所屬的頭檔案stdlib.h和time.h了,但在其他的編譯環境,可能還需在程式前面加上如下兩條指令:
#include
#include
獲得随機數之後,就可以通過do-while(true)這樣的無限循環結構來不斷地讓使用者輸入猜想的數字并和生成的随機數進行比較了,隻有當猜想的數字和生成的随機數相等時才使用break;語句跳出這個無限循環。
完整程式實作如下:
1#include
2
3int main(int argc, const char * argv[]) {
4 using std::cout;
5 using std::endl;
6 using std::cin;
7
8 int x;
9 srand((int)time(0));
10
11 int randomInt = rand()%100+1;
12 cout<<"A random integer (1 to 100) has been created."<<endl;
13 do{
14 cout<<"Please guess the number:"<<endl;
15
16 if(cin>>x&&cin.get()=='\n'){
17 if(x==randomInt){
18 cout<<"That's right! The number is "<endl;19 break;20 }else{21 if(x22 cout<<"The random number is higher."<<endl;23 }else{24 cout<<"The random number is lower."<<endl;25 }26 }27 }else{28 cin.clear();29 cin.ignore(INT_MAX, '\n');30 cout<<"Please input an integer!"<<endl;31 }32 }while(true);33 return 0;34}
歡 迎點選右下方↓↓"在看"↓↓來分享