gpt4 book ai didi

c - 为什么我的随机数生成器不打印任何 1?

转载 作者:行者123 更新时间:2023-12-04 10:17:31 25 4
gpt4 key购买 nike

我为我的一个项目制作了这个 randomNumberGenerator。它随机打印 1 到 9 之间的所有数字,但不打印数字 1。if 语句用于消除任何连续数字(123 或 555 f.e.)。我该怎么做才能确保它也能够打印 1。欢迎所有帮助!

处理我的文件的 fp 部分应该与问题无关。

编辑:我在 Windows 中工作

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

int main() {
int n = 3000;
int randomNumber;
int lastNumber;

FILE * fp;
fp = fopen ("C:\\Users\\furtherDirectoryToFile", "w");

srand(time(0));

for (int i = 0; i < n; i++) {
lastNumber = randomNumber;
randomNumber = rand() % 10;
if (randomNumber == lastNumber) {
continue;
} else {
if (randomNumber == ((lastNumber + 1) || randomNumber == (lastNumber - 1))) {
continue;
}
}
printf("%d\n", randomNumber);
fprintf (fp, "%d\n", randomNumber);
}

fclose (fp);
return 0;
}

最佳答案

问题是,您的括号在 if 子句中设置错误。你需要:

if ((randomNumber == (lastNumber + 1)) || (randomNumber == (lastNumber - 1)))

你有

(randomNumber == 
( (lastNumber + 1) || randomNumber == (lastNumber - 1)))

计算结果为

(randomNumber == 1)

这就是为什么你永远不会观察到 1。

更多评论:

一般来说,如果您尝试禁止序列,它不会使您的随机数更安全;相反,如果有人知道这个算法,他可以对下一个数字做出假设,否则他无法做出这些假设。

来自评论:

正如 moooeeeep 所说,您应该先初始化变量 randomNumber,然后再使用它。

JoachimSauer 注意到,lastNumber 只有在确实输出数字时才应设置,否则您的算法可能会失败。

正如 SteveFriedl 所说,如果您需要范围 1-9 而不是 0-9,请使用 randomNumber = rand() % 9 + 1 ;

关于c - 为什么我的随机数生成器不打印任何 1?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59140569/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com