首页 > 编程语言 >c++学习案例:猜数字游戏

c++学习案例:猜数字游戏

时间:2022-08-29 00:34:38浏览次数:68  
标签:rand 游戏 c++ 案例 user 随机数 input include cout

最近在学习C++,遇到了一个案例:猜数字游戏

案例要求:系统生成一个范围在1-100的随机整数,用户有5次猜数字的机会,当用户猜的数字大于或小于生成的值时进行提示,5次没猜对则失败,猜对则成功;

代码:

#include <stdio.h>
#include <iostream>
#include <ctime>
using namespace std;

int main(){
    int rand_num = rand()%(1 - 100);
    cout << "rand_num = " << rand_num << endl;
    int user_input;
    int gameTime = 0;
    int maxGameTime = 5;
    cout << "请输入一个1-100的数字:" << endl;
    cin >> user_input;
    while (gameTime < maxGameTime){
        if (user_input == rand_num){
            cout << "恭喜你猜对啦!" << endl;
            break;
        }
        else if (user_input < rand_num){
            gameTime ++;
            cout << "数字偏小了哦,再想想?剩余次数:" << maxGameTime - gameTime << endl;
            cout << "请输入一个1-100的数字:" << endl;
            cin >> user_input;
        }
        else if (user_input > rand_num){
            gameTime ++;
            cout << "数字偏大了哦,再想想?剩余次数:" << maxGameTime - gameTime << endl;
            cout << "请输入一个1-100的数字:" << endl;
            cin >> user_input;
        }
    }
    return 0;
}

第一次运行是可以的,但是反复运行后,发现每次生成的随机数都一样的,查了一下资料:

rand()函数生成随机数需要通过srand()函数设置一个随机数种子。srand()和rand()配合使用产生伪随机数序列。rand函数在产生随机数前,需要系统提供的生成伪随机数序列的种子
rand()根据这个种子的值产生一系列随机数。如果系统提供的种子没有变化,每次调用rand函数生成的伪随机数序列都是一样的。
srand(unsignedseed)通过参数seed改变系统提供的种子值,从而可以使得每次调用rand函数生成的伪随机数序列不同,从而实现真正意义上的“随机”。
通常可以利用系统时间来改变系统的种子值,即srand(time(NULL)),可以为rand函数提供不同的种子值,进而产生不同的随机数序列。

原来在C++中,需要生成随机种子去改变随机数序列,好,上代码:

#include <stdio.h>
#include <iostream>
#include <ctime>
using namespace std;

int main(){
    srand((unsigned)time(NULL));
    
    int rand_num = rand()%(1 - 100);
    cout << "rand_num = " << rand_num << endl;
    int user_input;
    int gameTime = 0;
    int maxGameTime = 5;
    cout << "请输入一个1-100的数字:" << endl;
    cin >> user_input;
    while (gameTime < maxGameTime){
        if (user_input == rand_num){
            cout << "恭喜你猜对啦!" << endl;
            break;
        }
        else if (user_input < rand_num){
            gameTime ++;
            cout << "数字偏小了哦,再想想?剩余次数:" << maxGameTime - gameTime << endl;
            cout << "请输入一个1-100的数字:" << endl;
            cin >> user_input;
        }
        else if (user_input > rand_num){
            gameTime ++;
            cout << "数字偏大了哦,再想想?剩余次数:" << maxGameTime - gameTime << endl;
            cout << "请输入一个1-100的数字:" << endl;
            cin >> user_input;
        }
    }
    return 0;
}

搞定~

标签:rand,游戏,c++,案例,user,随机数,input,include,cout
From: https://www.cnblogs.com/akne/p/16634563.html

相关文章

  • 1-4 django 案例:用户管理
    1.视频https://www.bilibili.com/video/BV1S44y1K7Hd?p=17 2.笔记linux安装数据:https://blog.csdn.net/weixin_44741023/article/details/122620956https://blog.cs......
  • 语言与生活——假如一切都是语言游戏
    哲学领域中,把语言提高到一个前所未有高度的人是维特根斯坦。维特根斯坦彻底破坏了哲学中的形而上学,他认为哲学史上的大部分争论只是语义不清与逻辑混乱带来的困惑而已,哲学......
  • C++中 sort()和priority_queue()中的自定义比较
    C++sort/priority_queue自定义比较sort/priority_queue的自定义比较是有区别的:sort是自定义函数;priority_queue则是自定义结构体,结构体里面重载()实现自定义比较......
  • C++ 性能小测 1 二维数组的遍历效率
    C++性能小测1二维数组的遍历效率遍历二维数组时,常规思路是使用一个嵌套循环。一方面,由于CPU使用了分支预测技术,因此通常将循环次数最多循环的放在最内层。另一方面,由......
  • C++一些新的特性的理解(二)
    1C++11多线程thread重点:join和detach的使用场景thread构造函数参数绑定c函数绑定类函数线程封装基础类互斥锁mutexconditionnotify、waitlock_guard/unique_l......
  • C++【多线程编程】之【初识线程】
    1.用c++11的thread库还是用pthread库?至于选择哪种多线程编程方案,需要根据你的实际项目、运行平台、团队协作等因素来考虑。一般而言,如果使用的是Linux操作系统,那么可以......
  • Google C++ Style Guide 学习
    目录参考参考http://home.ustc.edu.cn/~hqp/RootClass/AddFiles2/GoogleC++StyleGuide.pdfhttps://zh-google-styleguide.readthedocs.io/en/latest/google-cpp-styl......
  • 凝思操作系统变电站应用软件案例
    软件名称:linux系统平台上国产化应用微机五防系统开发语言:c++开发GUI工具:wxWidgets3.1.5、agg操作系统:ubuntu18.04LTS 及以上版本、 凝思6.0.80及以上版本  ......
  • 【C++-笔记】override与final说明符
    在effectiveC++中提到C++没有Java那样的finalclasses的禁止派生的机制,遂想到在C++Primer中好像提到过final说明符,正好就连带着override说明符一起复习一下了。简介首......
  • C++ 用函数打印员工的平均工资
    #include<iostream>#include<windows.h>#include<string>usingnamespacestd;floataverageSalary(intn[],inti){floatsum=0;for(intx=0;x......