-4

我究竟做错了什么?我想要a随机数。负整数和正整数

#include <iostream>
#include <cstdlib>
int main(){
   int a;
   cin<<a;
   int t[a];
   for(int i=0;i<a;i+=1)
      t[a]=rand();
   for(int i=0;i<a;i++)
      cout>>t[i];
}

我非常初学者,我想要随机数,但我只有一个非常大。有人可以帮忙吗?

对不起,但你看到了我没有看到的问题。现在我知道我应该只写>>endl

编辑: 我更正了我的代码,现在可以使用

#include <cstdlib>
#include <time.h>
int main(){
   int a;
   cin>>a;
   for(int i=0;i<a;i++)
      cout<<(rand()-rand())<<endl;//i asked only for this "endl"
}
4

4 回答 4

2

您尚未播种随机数生成器。srand()在程序开始时调用。

通常的方法是使用当前时间来调用它:

std::srand(std::time(0))

您还需要包括<ctime>

请注意,rand() 它不会返回负值,您需要自己实现该逻辑。

于 2013-04-27T22:21:41.440 回答
1
cin<<a;

在这里,您使用了错误的运算符。将尖括号视为显示数据流。你要:

cin>>a;

与以下类似cout

cout<<t[i];

您还在第一个循环中使用 索引ta不是使用索引:ifor

t[i]=rand();
//^ This is i, not a

另一个问题是您正在使用编译器扩展来创建运行时大小的数组。也就是说,对于标准 C++,您不能将a其用作数组的大小,因为它在编译时是未知的。

于 2013-04-27T22:16:32.887 回答
1
t[i]=rand();

不是

t[a]=rand();

还是你也写错了?

于 2013-04-27T22:19:03.470 回答
1

我不确定 100%,但 IMOrand()只能创建正数,从0to 65535,这取决于编译可执行文件的时间:这意味着一旦你编译了.exe文件,它会一遍又一遍地给出相同的数字!

为了让他产生不同的数字,你必须使用srand().

另一件事:在 C++ 中,您不能使用type array[n][它不在标准中!] 分配动态数组,即使编译器允许您这样做!实际上,编译器会翻译您的代码,array = new type[n]因为您必须使用delete[]关键字解除分配。

于 2013-04-27T22:35:08.347 回答