rand()在编译时生成相同的数字
rand() generating same number upon compilation
可能重复:
什么';在C++中使用rand()函数的正确方法是什么?
我一直在学习如何使用rand()函数,我用C++写了一个小的猜谜游戏,如下所示,但问题是,无论我编译多少次程序,生成的数字都是相同的->41
#include <iostream>
#include <cstdlib>
#include <conio.h>
using namespace std;
int main()
{
int x = rand()%100;
int y=0;
cout << "Ghiceste numarul!" << endl;
cin >> y;
while(y != x) {
if(y > x) {
cout << "Numarul tau este prea mare! Incearca un numar mai mic!" << endl;
cin >> y;
}
if(y < x) {
cout << "Numarul tau este prea mic!" << endl;
cin >> y;
}
if (y == x) {
cout << "FELICITARI, AI GHICIT NUMARUL!n";
return 0;
}
}
}
我还试图改变rand()的最大值,只要我把它<41.
有什么想法吗?我不知道为什么会发生这种事。我正在使用CodeBlocks IDE,并尝试重建(CTRL+F11)
尝试添加
srand(time(0));
在CCD_ 1的开始。
您应该首先尝试初始化rand()函数的种子,如下所示:
srand (time(NULL))
在CCD_ 2的开始。确保在标题中包含时间.h
#include <time.h>
或
#include <ctime>
它可能每次都为随机数生成器使用相同的种子。如果每次都将随机数生成器的种子设置为不同的值,则会得到不同的数字。根据文件:
为了生成类随机数,srand通常被初始化具有一些独特的价值,比如与执行时间相关的价值。例如,函数time(在header)每秒都不同,这就足够与众不同了满足大多数随机化需求。
您需要将种子传递给rand()函数,该函数在每次运行程序时都会有所不同(例如时间戳)。一般来说,生成真正的随机数是不可能的,但你可以得到一个伪随机数。
在每次运行程序时,随机数生成器都以相同的默认状态进行种子设定。
为了在每次运行中获得不同的结果,您需要通过调用srand()
并传递新的种子来为程序中的随机数生成器种子。使用time(NULL)
的返回值作为种子是很常见的,因为这将保证在程序的不同运行中获得不同的种子。
因此,在main
的开头添加以下内容:
srand(time(NULL));
您需要在main
的开头使用srand()为rand函数播种,通常使用time();函数
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 编译时间文本到数字转换 (atoi)
- 如何确定integer_sequence在编译时是否包含给定的数字?
- 我正在尝试计算 char 数组中的内容,直到 null 终止,但每次编译时,我都会得到一个比我的数组大的数字
- 编译C 程序时具有逻辑错误,该程序应将任意大的数字表示为字符串
- 创建一个程序,要求用户输入两个数字,并有三个可能的答案.代码未编译.数字(作为int)
- 在不重新编译源代码的情况下更改C++(C)程序中定义的数字
- 我正在尝试编写一个函数来计算C++数字的数字根,但在编译后出现错误
- 初始化具有递增数字的编译时常量大小的数组
- 有没有一种方法可以获得给定数量的输入,其中该数字是由c++中的编译时模板给定的
- 程序编译并执行,但输出的不合理大的数字作为最大值.如何显示长双倍?
- 如何使用模板在编译时查找 2 个数字的 HCF
- 在编译时生成唯一的数字
- rand()在编译时生成相同的数字
- c++编译错误预期的标识符在数字常量之前
- 使用nmake编译Qt给出命令行错误D8021:无效的数字参数' /FS '
- 未定义的LONG_PTR引用,数字火星c++编译问题
- 是否有可能在编译时计算数字的阶乘,但不使用枚举?
- 在编译时查询字符是否为数字
- 如何在Visual c++编译期间输出编译时数字常量?