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

时间:2019-12-02 14:06:12

标签: c

我为我的一个项目设置了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;
}

1 个答案:

答案 0 :(得分:8)

问题是,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;