My output is 20 random 1’s, not between 10 and 1, can anyone explain why this is happening?
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
int main()
{
srand((unsigned)time(0));
int random_integer;
int lowest=1, highest=10;
int range=(highest-lowest)+1;
for(int index=0; index<20; index++){
random_integer = lowest+int(range*rand()/(RAND_MAX + 1.0));
cout << random_integer << endl;
}
}
output:
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Because, on your platform,
RAND_MAX == INT_MAX.The expression
range*rand()can never take on a value greater thanINT_MAX. If the mathematical expression is greater thanINT_MAX, then integer overflow reduces it to a number betweenINT_MINandINT_MAX. Dividing that byRAND_MAXwill always yield zero.Try this expression: