数组中的C ++随机数生成器

时间:2016-06-23 08:09:17

标签: c++ arrays

我想用C ++编写一个程序,它将显示1到54的6个随机数。下面你可以找到代码。出于一些奇怪的原因,当我运行程序时,我偶尔会偶然发现这样的输出:

  

Bugunku sansli loto sayiniz:17 1 12 32 33 3418568

我无法弄清楚为什么最后一个数字忽略了我的规则。 任何帮助将不胜感激。

#include <cstdlib>
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
    cout << "Bugunku sansli loto sayiniz: " << endl;
    srand(time(0)); 
    int myArray [5];
    for (int i = 0; i < 6; i++)
    {
        myArray [i] = (rand() % 55) + 1;
        cout << myArray [i] << '\t';
    }
}

4 个答案:

答案 0 :(得分:3)

  

我无法弄清楚为什么最后一个号码忽略了我的规则。

因为for循环中访问的最后一个数字超出了数组的范围,所以取消引用它会导致UB。 for循环应为

for (int i = 0; i < 5; i++)
                    ~

然后i将是04,循环5次,而不是代码显示的6倍。

你可以使用range-based for loop(因为C ++ 11)来避免这种错误:

for (auto& i : myArray) {
    i = (rand() % 55) + 1;
    cout << i << '\t';
}

答案 1 :(得分:1)

  

从1到54的随机数

所以这也是不正确的:(rand() % 55) + 1;

您需要(rand() % 54) + 1;

答案 2 :(得分:0)

因为你最后一次去了 myArray [5] 而你的阵列没有这个地方所以你得到它

你需要这样写:

#include <cstdlib>
#include <iostream>
#include <ctime>

using namespace std;

int main()
{
    cout << "Bugunku sansli loto sayiniz: " << endl;
    srand(time(0)); 
    int myArray [5];
    for (int i = 0; i < 5; i++)
    {
        myArray [i] = (rand() % 55) + 1;
        cout << myArray [i] << '\t';
    }
}

答案 3 :(得分:0)

如果你想要6个项目,你需要为六个项目制作一个数组

    int myArray[5];

这将提供5个项目,其中

    int myArray[6]; 

这将为您提供6件物品 这将解决您的问题