Random numbers in C
ZZU1
我尝试生成随机数,但它们是相同的…我三个EDOCX1不管怎样。 我该怎么办?
数组声明:
ZZU1
- 您的第一个calloc调用应该是sizeof(int *),但您似乎在一个主机上工作,其中简单指针和int的大小相同(大多数架构都是这样)。
- 你基本上在给出答案后就编辑了你的问题,在某种程度上,这些答案不再与问题匹配,并以这种方式失效。请不要这样做。
呼叫srand()外的环。你是reseeding它每一个迭代。 </P >
srand()种子的随机数的发电机,你得到一个不同的随机数序列depending的输入。你的回路的游程甚快,所以呼叫的time(NULL)总是时返回同样的值。你是resetting到同样的随机序列,与每一个迭代。作为一个通用的规则,只有在呼叫srand()曾经在你的程序。 </P >
- 同意,您(通常)不需要对随机数生成器进行多次种子设定。
- @BTA:没错,你不需要多次播种。重新植入"合适的"随机数生成器是另一回事,我的意思是任何用于安全的东西。
不要打电话srand()每一次通过循环beforehand想做就做一次。 </P >
常见问题解答15到20将兴趣。和我是tempted来创建一个新的标签设计等问题。 </P >
- 可能创建一个题为"srand()如何影响随机数生成器的状态?",并在每次出现另一个细微变化时将其标记为副本;-)
- 是的,一个连续波版本。但是我们会复制所有的公司语言常见问题,不是吗?
- 是的,但它不可避免地会包含大量的常见问题解答副本(根据f的定义),无论您做什么,都会复制comp.lang.*常见问题解答。但是,除非问题被无情地标记为重复的问题,即使它们稍微改变了主题,它们最终得到的信息也会比现有的FAQ少(假设FAQ能够很好地覆盖它)。cw版的常见问题解答,也就是f-on-so,可以被标记为这样,并链接到语言faq和任何其他相关资源,并且可以以最一般的方式表达问题,以确保它们捕获最多的重复。或者别的什么。
- 我也在想些什么。将此讨论移至meta?
</P >
srand函数,这是一个"种子"随机数的发电机。在案例的你不知道,在计算机上随机数的真的是随机的。效应,对电脑是有一个列表的随机数,这似乎在它,和你使用srand告诉它的启动,在那名单,与每个呼叫rand()回归到下一项的列表。 </P >
的原因是你写的srand(time(NULL))to get to start随机数在一些点,这并不是要去的是同一时间,每一个你运行的程序(除非该程序的启动,在同一时间)。 </P >
什么?你是做repeatedly这里是讲"程序的重新随机号码表.的同一点(因为时间是一样的每一次你去的一环)。移动呼叫的srand外环,和你将得到正确的结果。 </P >
1 2 3 4 5 6 7 8
| srand(time(NULL ));
for(i = 0; i < n ; i ++){
printf("%d", time(NULL ));
for(j = 0; j < (n -1); j ++){
a [i ,j ] = rand();
}
} |
一次呼叫及外环。 </P >
你需要打电话srand()之前进入环。srand()初始化的radnom号发电机与给定的种子和generates独特的序列的随机数的方法,这种子。 </P >
你的环executes甚快,每一个呼叫的time(NULL)YIELDS的同一时间(测量在秒)hence你初始化随机数发生器以同样的种子,每一个循环迭代。 </P >
谢尔盖,你得到的是不安的错误信息与a[i,j]版,是因为这是一个理想有效的表达。在逗号操作符evaluates的子表达式从左到右键和值时返回的最后一个表达式。因此,写作是a[i,j]编号的a[j]。。。。。。。什么是你收到的是打印的值的指针的第j个矢量在你的矩阵。 </P >
1 2 3 4 5 6 7 8 9 10 11 12 13
| int** a ;
int i ;
printf("Enter array size:");
scanf("%d", &n );
if( n < 1 ){
printf("Size should be > 0
");
return NULL ;
}
a = (int**)calloc(n , sizeof(int));
for(i = 0; i < n ; i ++)
a [i ] = (int*)calloc(n -1, sizeof(int)); |
这里是我的阵列………………… </P >
- 首先,您应该编辑您的文章以添加新信息。这个网站不像一个论坛。第二,我支持我的说法,即您的二维数组语法是错误的,在访问一个项时应该执行a[i][j]。下面是多维数组教程:functionx.com/cpp/lesson12.htm
- 编写C代码时不需要强制转换"(int**))"。
- 我喜欢江户记1(2),但没用……
1 2 3 4 5 6
| srand(time(NULL ));
for(i = 0; i < n ; i ++){
for(j = 0; j < (n -1); j ++){
a [i ,j ] = rand();
}
} |
好的物。号是同样的………………… </P >
- 这个a[i,j]语法是什么?您可能需要a[i][j],尽管您应该得到一个编译器错误,除非j是一个普通数组而不是像我确定的那样的二维数组。
- 我没有错误……但裸体者是一样的…
- 显示a的声明。