C 为什么我的随机数生成器不打印任何1';s

C 为什么我的随机数生成器不打印任何1';s,c,C,我为我的一个项目做了这个随机数发生器。它随机打印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 =

我为我的一个项目做了这个随机数发生器。它随机打印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;
}
#包括
#包括
#包括
#包括
int main(){
int n=3000;
整数随机数;
整数;
文件*fp;
fp=fopen(“C:\\Users\\forcedirectorytofile”,“w”);
srand(时间(0));
对于(int i=0;i
问题在于,if子句中的括号设置错误。你需要:

if ((randomNumber == (lastNumber + 1)) || (randomNumber == (lastNumber - 1)))
相反,你有

(randomNumber == 
       ( (lastNumber + 1) || randomNumber == (lastNumber - 1)))
评估结果是

(randomNumber == 1)
这就是为什么你从不遵守1

进一步评论:

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

从评论中:

正如Moooeeep所评论的,您应该在首次使用变量之前初始化变量
randomNumber

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


正如SteveFriedl所评论的,如果您需要范围
1-9
而不是
0-9
,则使用
randomNumber=rand()%9+1

您可能希望在进入循环之前初始化
randomNumber
。1.)请注意,
lastNumber
始终是您生成的最后一个随机数,即使您没有显示它,因此您可以轻松地将同一个数字显示两次。2.)还要注意的是,“随机数”意味着相同的数字(或一个大于或小于1的数字)肯定会出现并且仍然是随机的,任何试图用这样的规则使这些随机数“更随机”的尝试实际上都会减少随机性(这可能是你想要的,但如果你的目标是“增加随机性”是的:设置
randomNumber=99
意味着首次通过循环不会被拒绝。另外,如果您想要数字1-9,您可能需要设置
randomNumber=(rand()%9)+1
,这将产生该范围。@SteveFriedl感谢第一部分。我需要一个0-9的范围,所以我认为我已经得到的关于rand()函数的值是可以的。这就解决了它!非常感谢你。我需要一个0-9的范围,所以用SteveFriedl所说的解决了这个问题。