How can I select a random element from a character array in c ?
For instance:
char *array[19];
array[0] = "Hi";
array[1] = "Hello";
etc
I am looking for something like array[rand], where rand is the random integer number between o and the array's length(in this case 20) like 1, 2, 3 , 19 etc.
5 Answers 5
To start things off, since you have an array of strings, not of characters, you have to declare it as char* array[19];
Then, you can declare the following (always useful) macro
#define ARR_SIZE(arr) ( sizeof((arr)) / sizeof((arr[0])) )
Last, you can choose arr[rand() % ARR_SIZE(arr)] (while keeping in mind that performing % on rand() is not the proper way to do get a random number within a range.
2 Comments
srand(), but be aware that getting a decent seed is actually rather hard. And the drand48() family of PRNG functions is quite useful too, though you still have the seeding problem.int n = rand()%20;
printf("%s\n", array[n]);
Comments
You can try array[rand() % ARRAY_LEN] but you are going to get a single char and not a char*
and when you are doing array[0] = "Hi"; it's not correct since you are assigning to a single char a char*
or turn your char array[20] into a char *array[20] and you can assign a string of characters
1 Comment
What you propose is the best solution there is - choose a random index and then use the element at this index. If your question is how to get a random integer, use the built-in function rand().
Comments
This can be done using rand in the c library stdlib.h
You can get a random number like this:
char random_elem = array[rand()%20];
and you can print it out like this:
printf("%d",array[rand()%20]);
rand()char* array[20];20 * rand()is not correct. Userand() % 20. However, if your array is 20 elements long you need to fix your variable declaration! You're only allocating 19 elements there.%because the results can be non-uniform. Multiplying a U(0,1) value times 20 and flooring will give an int from 0 to 19, i.e., 20 elements all set for zero-based array indices.