En el ejemplo que pones desafortunadamente es demasiado pequeño, y no es posible ver cual sea el problema.
Aparentemente la sentencia es correcta, pero creo que se necesita una parte mayor de tu codigo mas representativa para poder averiguar el problema.
Respecto a rand(), la funcion rand() genera siempre el mismo numero aleatorio (o mas correctamente, pseudo-aleatorio), a menos que utilices al principio de tu programa srand ( time(NULL) );
Saludos