【发布时间】:2018-11-01 09:10:58
【问题描述】:
我想知道为什么我的 gcc 编译器在 Windows 10 上的 Sublime Text 3 中的输出与预期的输出不同?如果是这样,我该如何更改编译器以使其运行相同?
这是预期的输出,当我使用 https://repl.it/repls/InternalSeveralEntropy 和 gcc 4.6.3
时可以收到The set of numbers are:
1 4 3 3 7 2 3 2 9 9 10 9 5 2 10 7 2 3 1 1
但是,这是我使用多个 gcc 版本收到的输出,5.4.0、6.3.0、8.1.0 甚至4.6.3。
The set of numbers are:
2 2 8 6 8 2 3 8 4 6 10 5 9 2 8 10 7 2 1 6
我尝试过搜索,我最接近的理解是它与 srand() 的功能不同有关吗?下面附上我的代码。
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int N = 20, DATA[20];
int i; //< you local variables here >
srand(454646); //don't change this line! Will be used in autograding... You may fail test cases if change this
for (i = 0; i < N; i++){ //< generate rand numbers and store here in DATA array >
DATA[i] = rand()%10 + 1;
}
printf("The set of numbers are:\n");
for (i = 0; i < N; i++){
printf("%d ", DATA[i]);
}
printf("\n");
//< write using FOR loops to determine MODE and print >
return 0;
}
【问题讨论】:
-
无关:您需要播种
srand以产生不错的随机性。 -
嗯...也许他们应该生成相同的序列。使用 VC2008 它生成了正确的序列。
-
我相信
replit使用Linux,因此rand可能使用与在Windows 上运行的ming-gw 的gcc 不同的实现。我不会关注你的随机性与他们的差异。 -
@WedaPashi 请注意,在某些情况下(例如测试),每次生成相同的伪随机序列可能很有用。
-
//不要更改此行!将用于自动评分...如果更改此设置,您可能会失败测试用例哇。创建这个问题的人是否知道来自
rand()的数据是依赖于实现的?如果是这样,那个人是否指定了您必须使用的确切实现(编译器、操作系统、C 运行时库等)?如果不是,那这个人就不明白问题所在。