Funkcja rand() jako wskaźnik std::vector zwraca za każdym razem maksymalną wartość

0

Próbuję stworzyć funkcję która będzie generowała losowo (na ile to możliwe) imiona. Sprawa prosta, nie raz się to robiło. Jednak jest problem kiedy próbuje użyć std::vector. Nie wiem co robię nie tak, ale rand() uparcie zwraca mi maksymalną wartość. Zawsze. Rzućcie okiem na mój kod i powiedzcie czy widzicie błąd.

Employee generate_random_employee(Employee obj)
{
	std::vector<std::string> male_names = {"Donald", "Piotr", "James", "Tiny", "Ricky"};
	std::vector<std::string> female_names = {"Diana", "Joelle", "Sue", "Karolina"};
	std::vector<std::string> lastnames = {"Lester", "Pound", "Park", "Ennis", "Duck",
										"Tusk", "Disney", "Jurassic", "Looney-Warde" };

	int sex = (rand() % 1) + 1; // zawsze zwraca 1

	if (sex == 1)
	{
		obj.name = male_names[(rand() % 1) + (male_names.size() - 1)];  // zawsze zwraca 5
	}
	else
	{
		obj.name = female_names[(rand() % 1) + (female_names.size() - 1)]; 
	}

	obj.name += " " + lastnames[(rand() % 1) + (lastnames.size() - 1)];  // zawsze zwraca 9
	obj.age = (rand() % 24) + 25; // ! działa dobrze !

	return obj;
} 

na stackoverflow znalazłem takie coś: http://stackoverflow.com/questions/3032726/rand-generating-the-same-number-even-with-srandtimenull-in-my-main
Jednak to mi nic nie pomogło. Może ktoś z was potrafi zinterpretować to co napisali na tym forum i udzielić konkretnej pomocy?

edit: oczywiście w mainie znajduje się srand(time(NULL));, na samym początku i jest wywoływana tylko raz

1

Powiedz mi jakiej wartości spodziewasz się po reszcie z dzielenia przez jeden?

A ja myślałem że chcesz rozumieć, ale skoro nie chcesz to twoja sprawa:

Employee generate_random_employee(Employee obj)
  {
   static const char male_names[] = {"Donald", "Piotr", "James", "Tiny", "Ricky"};
   static const char female_names = {"Diana", "Joelle", "Sue", "Karolina"};
   static const char lastnames = {"Lester", "Pound", "Park", "Ennis", "Duck", "Tusk", "Disney", "Jurassic", "Looney-Warde" };
   obj.name
      =
        (rand()&1?male_names[rand()%(sizeof(male_names)/sizeof(*male_names))]:female_names [rand()%(sizeof(female_names )/sizeof(*female_names ))])+
        " "+
        lastnames[rand()%(sizeof(lastnames)/sizeof(*lastnames))]
       ;
   obj.age=(rand()%24)+25; 
   return obj;
  }
0

Co za beznadziejny błąd... już to dostrzegam. Dzięki

1 użytkowników online, w tym zalogowanych: 0, gości: 1