Modulo给出了不可能的价值

DrO*_*ine 1 c++ modulo

我想要一个介于1到6之间的四个值的表.

我正在使用: rand() % 6 + 1;

这应该给出1到6之间的值.

除非rand()生成值0.

  1. 我一直得到7分.我不想要任何7个

  2. 兰德的范围是多少?我如何阻止它生成任何0值?

  3. 替代解决方案非常受欢迎.

  4. 我的老师给了我们使用"随机"的线索.
    我们在学校使用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;
    }
    
    Run Code Online (Sandbox Code Playgroud)

我得到的一些价值观:

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
Run Code Online (Sandbox Code Playgroud)

7应该不可能,应该吗?

PS:我知道我的印刷品是火腿,一旦数字生成,我会让它变得更优雅.

Rob*_*obᵩ 9

比较这些线:

int Fasit[3];
for(I=0; I<4; I++) {
  Fasit[I]
Run Code Online (Sandbox Code Playgroud)

您声明一个包含三个条目的数组,您可以将其写入四次.

再试一次你的程序,但是:

int Fasit[4];
Run Code Online (Sandbox Code Playgroud)

  • @DrOnline,因为未定义的行为是莫名其妙的. (4认同)