我想要一个介于1到6之间的四个值的表。
我正在使用:rand() % 6 + 1;
这应该给出1到6之间的值。
除非rand()
生成值0。
我一直得到7分。我不想要任何7的
兰德的范围是多少?我如何阻止它生成任何0值?
非常欢迎替代解决方案。
我的老师给了我们使用“随机”的线索
我们在学校使用Borland C ++ Builder 5
我在家里使用Dev-C ++ 5.3.0.3
我发现他们的工作方式有些不同,我觉得很奇怪。
我不能使用random(),它不会在范围内声明...
int main (){
int I;
int Fasit[3];
srand (time(NULL) );
for(I=0; I<4; I++) {
Fasit[I]=rand() % 6 + 1;
}
std::cout << Fasit[0] << " " << Fasit[1] << " " << Fasit[2] << " " << Fasit[3] << " ";
return 0;
}
我得到的一些价值观:
2 6 1 7
5 2 1 4
5 2 1 4
5 2 1 4
1 3 1 6
5 3 3 7
5 3 3 7
5 3 3 7
7应该不可能,是吗?
PS:我知道我的印刷品是火腿,一旦数字生成,我会让它变得更优雅。答案 0 :(得分:9)
比较这些界限:
int Fasit[3];
for(I=0; I<4; I++) {
Fasit[I]
您声明一个包含三个条目的数组,您可以将其写入四次次。
再次尝试你的程序,但是:
int Fasit[4];
答案 1 :(得分:2)
你在Fasit中只有3个元素[3];当你写信给Fasit [3]时,你处于未定义行为的范畴,在这种情况下,它表现为自我与明显的矛盾。
答案 2 :(得分:2)
int Fasit[3];
您正在创建一个大小为3的数组,只能使用索引0,1或2进行访问。
你正在编写和阅读Fasit [3],它有一个未定义的行为。当行为未定义时,您必然会获得奇怪的结果。就是这样。
答案 3 :(得分:2)
Fasit[3]
只允许您访问Fasit[0]
,Fasit[1]
和Fasit[2]
。
访问Fasit[3]
,用于读取和写入,是未定义的行为。您的代码是写{读到Fasit[3]
:-)。该程序正在访问数组越界。修复它!
至于为什么打印7,这只是巧合。请注意,Fasit[0-3]
始终按照您的预期在1-6
范围内打印。
另见: