C++入门教程(4)猜数字游戏(rand)

196 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

上节说到一个猜数字的游戏,我们首先分析下这个小游戏的流程

1.首先系统产生一个需要猜的数字N(1<N<100)

2.输入一个数字,系统给出是大了还是小了,进一步判断数字的范围

3.重复输入数字,直到猜中数字

#include <iostream>
using namespace std;
 
int main(int argc, const char * argv[]) {
    // insert code here...
    //std::cout << "Hello, World!\n";
    
    //rand() 可以产生一个随机数 %取余 即可得到一个0-100的随机数
    int number = rand() %100 ;
    
    //input 用于获取玩家输入的数字
    int input = 0;
    //maxNum 用于保存当前能判断的最大值
    int maxNum = 100;
    //minNum 用于保存当前能判断的最小值
    int minNum = 1;
    
    cout << "请输入数字(1-100):";
    while(input != number)
    {
        cin >> input;
        if(input > number)
        {
            if (input < maxNum) {
                maxNum = input;
            }
            cout << "大了,请输入数字("<< minNum << "-"<< maxNum << ") \n" ;
        }
        else if(input < number)
        {
            if (input > minNum) {
                minNum = input;
            }
            cout << "小了,请输入数字("<< minNum << "-"<< maxNum << ") \n" ;
        }
        else{
            cout << "恭喜你,猜对了,数字是:" << number <<endl;
        }
    }
    
    return 0;
}

运行,不断根据提示最终我们得到了最终的答案,7

请输入数字(1-100):50
大了,请输入数字(1-50) 
25
大了,请输入数字(1-25) 
12
大了,请输入数字(1-12) 
6
小了,请输入数字(6-12) 
7
恭喜你,猜对了,数字是:7
Program ended with exit code: 0

真好玩,再玩一次,等一下。。。嗯? 怎么。还是7

不是说好了随机产生一个值么?!为什么一直是7?

其实rand()是伪随机,每次产生包括下一次产生的数都是固定的,我们连续输出10次

    for(int i = 0; i< 10 ;i++)
    {
        cout<< rand()%100<< "  ";
    }

这个结果永远都是

7 49 73 58 30 72 44 78 23 9 这个时候,需要引入一个随机的种子,这个种子可以是任意值,通常采用时间,我们修改一下代码,让每次产生的随机值都不同

#include <iostream>
#include <time.h>
using namespace std;
 
int main(int argc, const char * argv[]) {
    // insert code here...
    //std::cout << "Hello, World!\n";
    
    //如果随机种子是固定的值 则每次运行的结果还是一样的
    //srand(12);
    
    
    //随机种子为当前时间
    srand(time(NULL));
 
//    //测试随机产生10个随机数
//    for(int i = 0; i< 10 ;i++)
//    {
//        cout<< rand()%100<< "  ";
//    }
    
    //rand() 可以产生一个随机数 %取余 即可得到一个0-100的随机数
    int number = rand() %100 ;
    
    //猜之前查看是否每次都是随机的
    //cout << number ;
    
    //input 用于获取玩家输入的数字
    int input = 0;
    //maxNum 用于保存当前能判断的最大值
    int maxNum = 100;
    //minNum 用于保存当前能判断的最小值
    int minNum = 1;
    
    cout << "请输入数字(1-100):";
    while(input != number)
    {
        cin >> input;
        if(input > number)
        {
            if (input < maxNum) {
                maxNum = input;
            }
            cout << "大了,请输入数字("<< minNum << "-"<< maxNum << ") \n" ;
        }
        else if(input < number)
        {
            if (input > minNum) {
                minNum = input;
            }
            cout << "小了,请输入数字("<< minNum << "-"<< maxNum << ") \n" ;
        }
        else{
            cout << "恭喜你,猜对了,数字是:" << number <<endl;
        }
    }
    
    return 0;
}

好了这个简单的游戏算是实现完毕了。