程序每次运行都会生成相同的随机数? [复制]

2024-05-09

我刚刚完成扫雷类型游戏的编码,一切都很好,除了每次运行该应用程序时,它都会生成相同的数字(我运行了 3 次不同的时间,将输出保存到 3 个文本文件并使用diffLinux 中的命令,没有发现任何差异)。它的种子是time(NULL)所以每次都应该改变,对吗?

这是我的代码:

main.cpp

#include <iostream>
#include <cstdlib>
#include <time.h>
#include <string>
#include "Minesweeper/box.h"
#include <cstdio>

int main(int argc, char** argv){
using namespace std;
bool gameOver  = false;
int x, y, score = 0;
const int HEIGHT = 10;
const int WIDTH = 10;
unsigned int Time = time(0);

cout << "Welcome to Minesweeper. " << endl;


//setup grid
Box grid[10][10];

for(int i = 0; i < WIDTH; i++)
for(int n = 0; n < HEIGHT; n++){
  unsigned int value = rand() %100 + 1;
  cout << value << endl;
  if(value <= 38){
grid[i][n].setFill(MINE);
//cout << i << "," << n << " is mined." << endl;
  }
  else
grid[i][n].setFill(EMPTY);
}

for(int r = 0; r < WIDTH; r++)
for(int l = 0; l < HEIGHT; l++)
  if(grid[r][l].getFill() == EMPTY)
cout << r << "," << l << " - EMPTY." << endl;
  else if (grid[r][l].getFill() == MINE)
cout << r << "," << l << " - MINE." << endl;

while(!gameOver){
cout << "Enter coordinates (x,y): ";
scanf("%i,%i",&x,&y);
if(grid[x][y].getFill() == MINE)
  gameOver = true;
else{
  cout << "Good job! (You chose " << x << "," << y << ")" << endl;
  score++;
}
}

cout << "You hit a mine! Game over!" << endl;
cout << "Final score: " << score  << endl;
getchar();

return EXIT_SUCCESS;
}

它是按时间播种的(NULL)

如果是的话我就看不到了事实上,在代码中搜索它不会返回任何结果。如果您没有显式设定种子,则默认行为与使用值 1 设定种子相同。

您需要明确说明如下内容:

srand (time (NULL));

开始时main某处(并确保你这样做once并且仅一次)。

尽管请记住,这使其取决于当前时间 - 如果您在同一秒内启动多个作业(或无论您的时间分辨率是什么),它们将以相同的种子开始。

来自 C 标准(C++ 的这些兼容性功能基于该标准):

srand 函数使用参数作为后续调用 rand 返回的新伪随机数序列的种子。如果随后使用相同的种子值调用 srand,则应重复伪随机数序列。如果在对 srand 进行任何调用之前调用 rand,则应生成与首次使用种子值 1 调用 srand 时相同的序列。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

程序每次运行都会生成相同的随机数? [复制] 的相关文章

随机推荐

  • Java 中的 HashMap 和 Map 对象有什么区别?

    我创建的以下地图之间有什么区别 在另一个问题中 人们似乎可以互换使用它们来回答 我想知道它们是否 如何不同 HashMap
  • 将 Django OAuth2 提供程序与 JupyterHub 结合使用

    我正在尝试运行与 JupyterHub 服务器配对的 Django Web 应用程序 用户通过 Web 应用程序输入 然后在登录后获得对笔记本服务器的访问权限 为了促进这一点 我尝试使用OAuth2 其中 Django 提供身份验证 Jup
  • d3.js:非线性图轴

    我正在尝试在轴上添加自定义比例 如下所示 这个想法是 一个刻度总是比前一个刻度大 2 倍 我的理解是 这是一个定制秤 我做了一些研究 但找不到类似的东西 所以我想我的问题实际上是两个问题 这个尺度是数学世界的 标准 吗 这是否可以使用来实现
  • PHP_CodeSniffer - 显示失败的嗅探

    PHP CodeSniffer 中是否有设置来显示失败的嗅探 我将输出与我们的编码标准进行比较 并且一一使用很难破译哪个测试失败 看看我们可能想忽略哪个 如果有一种简单的方法来显示故障嗅探 那么我可以更轻松 更快地完成配置 您可以使用 s
  • Angular 2循环遍历列表有一些延迟

    如何使用 Angular 2 和 TypeScript 以一定延迟循环遍历数组 我有一个数组 students Array
  • 使用 cygwin 安装 rsync [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想通过 rsync 备份 Solaris 服务器上的 Win XP 中的目录 我安装了 cygwin 但是当我输入 rsync 时 我得
  • 屏幕截图忽略了一些窗口

    我正在 MFC 中工作 我正在尝试捕获桌面的 bmp 我正在使用 GetDC NULL 来执行此操作 但它似乎忽略了特殊的皮肤窗口 它似乎忽略了用 UpdateLayeredWindow 绘制的窗口 此行为似乎仅发生在 Vista x64
  • 具有 Azure Active Directory 身份验证的 Jenkins:REST API 访问不适用于不记名令牌

    我需要使用 python 代码访问 Jenkins REST API 需要一些有关正确方法的指导 我在 apache tomcat 中托管了 jenkins v2 176 1 并启用了 SSL 我已根据以下内容配置了 Azure AD 身份
  • jpackage linux 创建的桌面文件不足

    我刚刚开始使用 jpackage 它是一个非常棒的工具 只要迈出一步 我的肩上的工作就减轻了很多 我对看起来硬编码且无法定制的东西越感到惊讶 JPackage 自动生成启动器 lib
  • 从 Roslyn 中的行号获取节点

    我怎样才能得到一个SyntaxNode基于行号 否则如果有可能得到LineSpan该行号然后到节点 您可以从文档文本中获取行的跨度 从那里 您可以找到与线的跨度相交的所有节点 这将返回多个语法节点 然后您可以使用您的条件来提取您要查找的语法
  • 在 jQuery UI 日期选择器中仅选择特定日期(日期列表来自 AJAX)

    在这里 我发送电影 ID 并获取可用天数 我想将其设置到日历中 但它不起作用并且它禁用所有日期 它从 PHP 返回日期字符串 日期字符串正确 但日历不起作用 请帮忙 日期字符串示例 28 02 2012 29 02 2012 01 03 2
  • 如何在 NextJS 应用程序中处理公共和私有路由?

    我正在开发一个具有公共和管理路由的应用程序 在过去的 CRA 应用程序中 我们使用了自定义路由元素 但我们在 nextjs 中没有 Thins 我们有很多公共页面 我们有 20 个私人页面 路线 在 nextjs 中处理受保护的经过身份验证
  • 使用对称密钥 (AES -128) 签名和验证消息

    我想知道对称密钥可以用来签署消息吗 我们可以使用共享密钥进行加密 另外 当使用对称密钥进行签名时 JAVA 中可以使用什么 API 来加载密钥并对消息进行签名 如果我使用 java security 中的 Signature 它有一个 ap
  • 谁应该在 MvvmCross 中创建视图模型实例

    澄清一下 我知道 MvvmCross 在创建视图模型的位置和方式方面非常灵活 我的问题更多的是关于适当的关注点分离 以简化复杂的跨平台应用程序的设计 假设我们有一个包含客户列表和客户详细信息的应用程序 在 iPad 和 Surface 上
  • python 2.7+ 中的组引用无效

    我正在尝试将我的网页 在 django 中创建 中的所有 WikiLink 类型的字符串转换为 html 链接 我正在使用以下表达式 import re expr r s A Z a z A Z a z s repl r a href 1
  • Java VM Windows CE 的最佳选择 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 LDAP 进行 Ruby on Rails 身份验证? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在开发一个网络应用程序 并且我有一个使用的身份验证方法bcrypt gem它工作正常 但我想将身份验
  • Swift 2.0 中的协议扩展方法调度

    我面临有关协议方法调度的问题 我有一个类层次结构 如下所示 protocol E func test extension E func test print jello class A E class B A func test print
  • 在什么情况下C++会在编译时进行数组边界检查?

    受到 使用编译时 HTML 解析的 C HTML 模板引擎 https github com rep movsd see phit 我正在尝试编写一个示例类来检查字符串中的第一个字符是否是a int dummy 0 class Test p
  • 程序每次运行都会生成相同的随机数? [复制]

    这个问题在这里已经有答案了 我刚刚完成扫雷类型游戏的编码 一切都很好 除了每次运行该应用程序时 它都会生成相同的数字 我运行了 3 次不同的时间 将输出保存到 3 个文本文件并使用diffLinux 中的命令 没有发现任何差异 它的种子是t