You need to call srand once per program execution. Calling rand updates the internal state of the random number generator, so calling srand again actually resets the random state. If less than a second has passed, time will be the same and you will get the same stream of random numbers.