我想用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';
}
}
答案 0 :(得分:3)
我无法弄清楚为什么最后一个号码忽略了我的规则。
因为for
循环中访问的最后一个数字超出了数组的范围,所以取消引用它会导致UB。 for
循环应为
for (int i = 0; i < 5; i++)
~
然后i
将是0
〜4
,循环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件物品 这将解决您的问题