It doesn't output the proper number of pseudorandom numbers. Well, sometimes it does and sometimes it doesn't.
One example can be seen when you enter 9 at the first prompt and 8 at the second. Or 8 at the first and 3 at the second.
Code:
#include <iostream> //opens iostream as a standard C++ included file
#include <conio.h> //opens conio.h for use of getch() and system() commands
#include <ctime> //opens ctime for the seeding of rand() using time
#include <cstdlib> //opens cstdlib for rand() function
#include <algorithm> //opens algorithm for sort() function
#include <set> //opens set for the use of sets
using namespace std; //uses the standard C++ namespace
int main() //opens the main (and only) function
{
int maxnum; //sets the variable "maxnum" (the highest random number that will be displayed) as an integer
int numofnums; //sets the variable "numofnums" (the number of random numbers that will be displayed) as an integer
int watcher; //sets the variable "watcher" (counter) as in integer
int endopt; //sets the variable "endopt" (option to repeat the program or exit the program) as in integer
int i; //sets the variable i as an integer, but i is gone now, I think
int randnum; //sets the variable "randnum" (used to add a random number into the set) to and integer
srand(time(0)); //seeds rand() by using the system time; exact outcome is based on OS
cout << "Welcome to the Random Number Generator." << endl;
cout << "Press any key to continue." << endl;
getch(); //pauses the program until the user hits any key
system("cls"); //a system call to clear the screen
step1:
maxnum = 0;
numofnums = 0;
watcher = 0;
endopt = 0;
i = 0;
randnum = 0;
cout << "Enter the maximum number in your range of random numbers." << endl;
cout << "This number will be the highest possible number that can be output." << endl;
cin >> maxnum;
while (maxnum <= 1) //an error check for an invalid maximum number (maxnum)
{
system("cls"); //a system call to clear the screen
cout << "\aYou entered an invalid number." << endl;
cout << "The highest possible number must be greater than 1." << endl;
cout << "Please try again. Enter the highest possible random number." << endl;
cin >> maxnum;
}
system("cls"); //a system call to clear the screen
cout << "Enter the number of random numbers to display." << endl;
cout << "This will be the number of random numbers that you will see." << endl;
cin >> numofnums;
while (numofnums <= 0) //an error check for an invalid number of random numbers
{
system("cls"); //a system call to clear the screen
cout << "\aYou entered an invalid number." << endl;
cout << "The number of displayed numbers must be greater than 0." << endl;
cout << "Please try again. Enter the number of random numbers to display." << endl;
cin >> numofnums;
}
if (numofnums >= maxnum)
{
cout << "You entered invalid numbers." << endl;
cout << "To prevent double or triple numbers, the range of the random numbers \n must be greater than the total number of random numbers displayed." << endl;
cout << "Press any key to try again." << endl;
getch(); //a "pause" command
system("cls"); //a system call to clear the screen
goto step1; //brings the user back to the beginning to try again...might replace this goto in the future
}
else
{
set<int, less<int> > randSet; //creates the set
watcher = 0; //sets the counter to 0 to prevent problems
while (watcher < (numofnums))
{
randnum = (rand() % (maxnum + 1));
randSet.insert(randnum); //fills the set with values
watcher = watcher + 1; //adds one to "watcher", which is the counter
}
cout << "Your random numbers are..." << endl;
set<int>::iterator iter;
for (iter = randSet.begin(); iter != randSet.end(); iter++)
cout << *iter << endl;
do
{
cout << "\n"; //newline
cout << "Enter 1 to run again or 2 to exit." << endl;
cin >> endopt;
system("cls"); //a system call to clear the screen
switch (endopt)
{
case 1:
goto step1;
break;
case 2:
return 0;
break;
}
}
while (endopt != 1 && endopt != 2);
}
}