C rand()只返回零
我正试图编写一个程序,将5个随机整数分配给一个数组,但到目前为止,它正在用零填充数组。而且,第一个数字不能是零。我做错了什么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()%
#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);