Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C rand()只返回零_C - Fatal编程技术网

C rand()只返回零

C rand()只返回零,c,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()%

我正试图编写一个程序,将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);
}
这是赋值,不是相等比较

int i;
而且,i未初始化,因此访问其值是未定义的行为。由于您意外地分配给它,而不是与它进行比较,因此如果i=0,则不会调用未定义的行为,但如果您修复了第一个错误,则会调用未定义的行为

i++;

printf("%d", number[i]);
在打印之前增加i意味着您总是在正在处理的单元格之后打印单元格

你其实不需要我;你要我做什么我都不会做。我们将删除i并将t重命名为i:


您的代码中有几处错误

一, 您没有初始化变量i

二,

应该是

if( i == 0 )
三, 你可以用变量t代替i-意味着变量i是不必要的

四, 在rand函数调用之前,应该对randomize函数进行函数调用,这样才能得到真正的随机数

五,
如果您只想显示随机数,甚至不需要使用数组,您可以通过在程序中调用rand来获得相同的“伪随机”值序列。要更改此序列,必须对随机数生成器进行“种子”处理。这是通过在程序开始时使用种子值调用srand函数一次来完成的

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

void srand(unsigned int seed);

除此之外,正如其他人所强调的,您的程序中存在逻辑缺陷,其中if条件赋值错误是最严重的。

始终使用激活的警告编译:-Wall-Wextra。编译器会告诉你如果i=0看起来很奇怪。你的编译器没有告诉你一半的问题吗?阅读警告消息。当0被分配给它时,它并不是未初始化的。@JonathanLeffler:对,第一个错误改变了第二个错误的效果。第二个bug仍然是一个bug,但在程序的当前状态下并不是完全未定义的行为。使用i、j和k作为循环索引是一个由来已久的传统,可以追溯到Fortran II的时代——比我的时代早得多。
if(i=0)
if( i == 0 )
void srand(unsigned int seed);