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