m0_61863834 2024-07-24 12:42 采纳率: 0%
浏览 68

VScode中生成随机数的函数,调用后只能生成同样的数字12,而教学视频中使用CLion生成的随机数是正常的,想问一下造成编辑器差异的原因是什么

VScode中生成随机数的函数,调用后只能生成同样的数字12,而教学视频中使用CLion生成的随机数是正常的,想问一下造成编辑器差异的原因是什么。
(生成随机数的问题已解决,可以用系统时间做种子生成随机数)主要想问下为什么在CLion中可以使用下列代码,而VScode中不行。

#include "iostream"
using namespace std;
#include <random>
int get_random_num(int min,int max){
    random_device rd;
    mt19937 gen(rd());
    uniform_int_distribution<> dis(min,max);
    int random_num=dis(gen);
    return random_num;
}
int main()
{   
     bool is_continue = true;
     int day = 0;
    while(is_continue){
        day++;
        cout<<"今天是第"<<day<<"天,开始向小美表白"<<endl;
        //每一次表白流程:送三朵玫瑰花
        int count = 0;
        while(count<3){
            count++;
            cout<<"送第"<<count<<"朵玫瑰花"<<endl;
        }

        cout<<"小美,我喜欢你!"<<endl;
        //模拟5%概率成功
        int num = get_random_num(1,20);
        cout<<"num="<<num<<endl;
        if(num==1){
            //成功
            is_continue=false;  //跳出循环
        }
    }
    cout<<"总算表白成功了!"<<endl;
    cout<<"今天是第"<<day<<"天,小美接受了我的表白"<<endl;
    return 0;
    
}

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-07-24 12:42
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    问题分析

    首先,我们来分析为什么在VSCode中生成的随机数总是相同的数字12,而在CLion中生成的随机数是正常的。这可能涉及到以下几个方面:

    1. 随机数生成器的种子问题: 在C++中,std::random_device 通常用于生成一个非确定性的随机数,作为随机数生成器的种子。如果std::random_device没有正确地生成非确定性的随机数,那么随机数生成器可能会每次都生成相同的随机数。

    2. IDE的默认配置问题: VSCode和CLion是两个不同的集成开发环境(IDE),它们在默认配置和插件管理上可能有所不同。这可能导致在VSCode中运行相同的代码时出现不同的行为。

    解决方案

    1. 确保随机数生成器的种子是随机的: 你已经通过使用系统时间作为种子解决了随机数生成的问题。这是一个非常好的解决方案,因为它确保了每次程序运行时种子都是不同的,从而生成不同的随机数。

    2. 检查IDE的配置

      • 确保VSCode安装了所有必要的C++开发插件和工具链。
      • 检查VSCode的配置文件(如.vscode/settings.json),确保没有设置影响随机数生成的配置。

    编程示例

    以下是使用系统时间作为种子的示例代码,可以在VSCode中使用:

    #include <iostream>
    #include <random>
    #include <chrono>
    
    using namespace std;
    
    int get_random_num(int min, int max) {
        auto now = chrono::system_clock::now().time_since_epoch().count();
        mt19937 gen(static_cast<unsigned int>(now));
        uniform_int_distribution<> dis(min, max);
        return dis(gen);
    }
    
    int main() {
        bool is_continue = true;
        int day = 0;
        while(is_continue){
            day++;
            cout << "今天是第" << day << "天,开始向小美表白" << endl;
            //每一次表白流程:送三朵玫瑰花
            int count = 0;
            while(count < 3){
                count++;
                cout << "送第" << count << "朵玫瑰花" << endl;
            }
    
            cout << "小美,我喜欢你!" << endl;
            //模拟5%概率成功
            int num = get_random_num(1, 20);
            cout << "num=" << num << endl;
            if(num == 1){
                //成功
                is_continue = false;  //跳出循环
            }
        }
        cout << "总算表白成功了!" << endl;
        cout << "今天是第" << day << "天,小美接受了我的表白" << endl;
        return 0;
    }
    

    运行环境信息

    • 确保VSCode和CLion使用的是相同版本的C++编译器。
    • 检查编译器的C++标准设置,确保两者一致。

    通过上述步骤,用户应该能够在VSCode中获得与CLion相同的随机数生成效果,并解决IDE之间的差异问题。如果问题仍然存在,可能需要进一步检查IDE的日志或错误信息,以确定具体的问题所在。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月24日