【发布时间】:2019-08-09 09:26:13
【问题描述】:
我有一个关于在 Windows 上用 C 语言生成随机数的问题。简而言之,我要做的就是生成 7 个 0 或 1 的数字。然后函数将对这些数字求和,结果将是全局定义数组的索引,该索引的值将增加 1。但是在生成器函数,我总是得到相同的数字序列。我做错了什么?
#include <windows.h>
#include <stdio.h>
#include <time.h>
int cells[8];
int generator(int n) {
int i;
int sum = 0;
for (i = 0; i < n; i++) {
int random_number = rand() % 2 + 0;
printf("%d ",random_number);
sum += random_number;
}
printf("\n%d\n",sum);
return sum;
}
DWORD WINAPI ThreadFunc(void *data) {
cells[generator(7)] =+ 1;
return 0;
}
int main() {
srand(time(NULL));
for (int i = 0; i < 10; ++i) {
HANDLE thread = CreateThread(NULL, 0, ThreadFunc, NULL, 0, NULL);
WaitForSingleObject(thread, INFINITE);
}
for (int j = 0; j < 8; ++j) {
printf("%i: %i\n", j, cells[j]);
}
}
【问题讨论】:
-
令人印象深刻的复杂性! :-) 另外,在
cells[generator(7)] =+ 1;行中,您可能打算使用+=。 -
stackoverflow.com/questions/52884311/…基本是同一个问题,懒得再回答了。
-
伙计们,我纠正了这个错误,但这不是我遇到的问题。我的问题是函数的每次调用,它都会打印相同的值。例如;循环中的第一个迭代:1 1 0 0 1 1 1。第二个迭代:1 1 0 0 1 1 1 等等。它总是给出相同的值。
标签: c multithreading numbers random-seed