The purpose of my function is to generate 8 random letters n times (specified when it is compiled). I approached this by writing two functions called genNumbers
- which generates 8 random numbers (between 0 and 25) and places them into an array called numbers
, and convert
- which converts each number in the array to the corresponding letter in the alphabet and places those letters into an array called letters
. Those two functions work perfectly, I tested them out multiple times.
Now I am having trouble implementing them in main.
I want main to take in a parameter which specifies how many letters
arrays are desired. So for example calling a.out 3
would output something like
SAFJPONG 1
VYREMNXZ 2
QWMKUZXC 3
This is what I have in my main:
int numbers[8];
string letters[8];
void genNumbers() {
int i;
srand (time(NULL));
for (i = 0; i < 8; i++) {
numbers[i] = rand() % 25;
}
}
void convert() {
int i;
for (i = 0; i < 8; i++) {
if (numbers[i] == 0) {
letters[i] = "A";
}
else if (numbers[i] == 1) {
letters[i] = "B";
}
else if (numbers[i] == 2) {
letters[i] = "C";
}
else if (numbers[i] == 3) {
letters[i] = "D";
}
else if (numbers[i] == 4) {
letters[i] = "E";
}
else if (numbers[i] == 5) {
letters[i] = "F";
}
else if (numbers[i] == 6) {
letters[i] = "G";
}
else if (numbers[i] == 7) {
letters[i] = "H";
}
else if (numbers[i] == 8) {
letters[i] = "I";
}
else if (numbers[i] == 9) {
letters[i] = "J";
}
else if (numbers[i] == 10) {
letters[i] = "K";
}
else if (numbers[i] == 11) {
letters[i] = "L";
}
else if (numbers[i] == 12) {
letters[i] = "M";
}
else if (numbers[i] == 13) {
letters[i] = "N";
}
else if (numbers[i] == 14) {
letters[i] = "O";
}
else if (numbers[i] == 15) {
letters[i] = "P";
}
else if (numbers[i] == 16) {
letters[i] = "Q";
}
else if (numbers[i] == 17) {
letters[i] = "R";
}
else if (numbers[i] == 18) {
letters[i] = "S";
}
else if (numbers[i] == 19) {
letters[i] = "T";
}
else if (numbers[i] == 20) {
letters[i] = "U";
}
else if (numbers[i] == 21) {
letters[i] = "V";
}
else if (numbers[i] == 22) {
letters[i] = "W";
}
else if (numbers[i] == 23) {
letters[i] = "X";
}
else if (numbers[i] == 24) {
letters[i] = "Y";
}
else {
letters[i] = "Z";
}
}
}
int main(int argc, char * argv[]) {
int i = 0;
int g,n;
if (argc == 2 && argv[1][0] > 0) {
n = atoi(argv[1]);
do {
genNumbers();
convert();
for (g = 0; g < 8; g++) {
cout << letters[g]; // this is where I believe the problem is
}
cout << " " << i+1 << endl;
i++;
}
while (i < n);
}
return 0;
}
When I run a.out 3
, my output looks like:
SAFJPONG 1
SAFJPONG 2
SAFJPONG 3
So evidently, my main is returning the same letters
array every time, and not creating 3 different ones like I want it to.
I have commented where I believe my problem is arising. I feel like it has something to do with having to delete the array so that a new one is made every time. Can anyone spot where I am going wrong?
Here's how I implemented the same program. I think there is something fishy with the second line in your code
string letters[8];
. Also you may want to check yourgenNumbers
andconvert
functions.EDIT:
You are going wrong in your call to
srand(time(NULL))
in thegenNumbers
function. Calling it every time when you make a call togenNumbers
causes you to reset the seed thus restarting the pseudo-random number sequence. It gives the same number even though you use time as a seed because the execution of this code is quick and the time difference is negligible. Your code would work if you had a call to something likeusleep(1000000);
in your code as it would cause significant time different between the function calls. For example: This code yields the desired result:EDIT:
If you still want to avoid the call to
srand()
in main then here's something you can do ingenNumbers
itself: