【发布时间】:2018-03-24 05:22:35
【问题描述】:
我一直在尝试应用在此站点上找到的所有建议,但似乎没有一个有效。
对于代码的第一部分,我需要用随机数(0 或 1)填充一个数组来模拟流行病的传播,但得到的数组根本不是想要的……这是我写的代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(int argc, char **argv)
{
int N, BC, t, T, i, v[N];
float b, g, p, r;
/*Variable values initialization*/
printf("Enter infection probability:\n");
scanf("%f", &b);
printf("Enter the number of individuals:\n");
scanf("%d", &N);
printf("Enter the number of time steps:\n");
scanf("%d", &T);
printf("Periodic boundary contitions? (Y:1 / N:0)\n");
scanf("%d", &BC);
/*First set of individuals*/
srand(time(NULL));
for(i = 0; i < N; i++){
v[i] = (rand()/RAND_MAX);
}
/*Check if array properly initialized*/
printf("Initial array:\n" );
for(i = 0; i < N; i++){
printf("%d-", v[i]);
}
我对数组的预期结果类似于:1-0-1-1-0-0-0-...,但我总是得到以下结果:
初始数组: 0-0-2-15-0-0-0-0-0-0-
我做错了什么?
谢谢一百万!
【问题讨论】:
-
使用变量
N定义数组v时,N的值是多少?当您初始化N时,定义不会追溯地“重新制定”。总之你有undefined behavior。 -
除此之外,
rand()/RAND_MAX仅在rand()恰好返回RAND_MAX时才给出1。可能不是你想要的。 -
你的编译器应该明确地警告你这一点。尝试提高警告级别。例如,使用 gcc 这将是
-Wall. -
另外,v[N] 是一个整数数组,你分配 rand()/RAND_MAX,当你除以整数时,它大部分时间都是 0。只有当 rand() 产生 RAND_MAX 你才会得到一个 - 这基本上是永远不会的。