Unseeded rand() has a purpose. If you're debugging a large and complicated program that is associated with random numbers, it's advantageous to have the same sequence repeat itself. Even if you're not debugging, only testing, it can come in handy.
Still you can exhaust entropy pool even with calls to urandom impairing other users of the machine. YOu should use it with caution. Also they are unusable if you will need to repeat same sequence of random numbers again.
So, learn how each of these methods work, theis upsides and downsides and use what you think better suits you.