rand()只返回零

时间:2014-03-04 04:13:40

标签: c

我正在尝试编写一个程序,它将为数组分配5个随机整数,但到目前为止,它正在用零填充数组。此外,第一个数字不能为零。我究竟做错了什么?

#include <stdio.h>
#include <stdlib.h>

int number[5];

int main()      {
    int i;
    int t=0;
    for (int t=0;t<5;t++)  {
        if (i=0)
        {number[i] = rand()%8+1;}
        else
        {number[i] = rand()%10;}
        i++;
        printf("%d", number[i]);
    }           
    return (0);
}

3 个答案:

答案 0 :(得分:3)

if (i=0)

这是作业,而非平等比较。

int i;

此外,i未初始化,因此访问其值是未定义的行为。由于您不小心将其分配给它而不是与之进行比较,if (i=0)不会调用未定义的行为,但如果您修复了第一个错误,它就会出现。

i++;

printf("%d", number[i]);

在打印之前增加i意味着您总是在您正在处理的单元之后打印单元格。

您实际上并不需要i; t执行您希望i执行的所有操作。我们将删除i并将t重命名为i

for (int i = 0; i < 5; i++) {
    if (i == 0) {
        number[i] = rand() % 8 + 1;
    } else {
        number[i] = rand() % 10;
    }

    printf("%d", number[i]);
}

答案 1 :(得分:0)

您的代码中出现了一些问题......

<强> 1) 您没有初始化变量i

<强> 2)

if(i=0)

应该是

if( i == 0 )

第3) 您可以使用变量t代替i - 意味着变量i是不必要的

<强> 4)randomize()函数调用之前,您应该有rand()函数的函数调用,这样您就可以得到真正的随机数

<强> 5) 如果您只想显示随机数,则甚至不需要使用数组

答案 2 :(得分:0)

通过在程序中调用rand(),您将获得相同的“伪随机”值序列。要更改此序列,必须将“随机数”生成器设置为“种子”。这是通过在程序开头使用种子值调用srand()函数来完成的。

理想情况下,种子使用的值应随程序的每次运行而变化。您可以用作种子的事物是进程ID,时间,日期或任何其他系统提供的值,保证每次运行程序都不同。

void srand(unsigned int seed);

除此之外,您的程序中存在逻辑缺陷,因为其他人已经突出显示,其中if条件分配错误是最严重的。