[C con Clase] Numeros Aleatorios
Programante
programante en gmail.com
Mar Jun 24 12:30:00 CEST 2008
Yasser Gonzalez Soto escribió:
> Como hago para generar numeros aleatrios en C
>
Usando ansi C, pero los números no son excesivamente aleatorios: (más
que suficiente para la mayoría de los casos)
#include <time.h>
#include <stdio.h>
int main() {
int numero1, numero2;
srand(time(NULL)); //Inicializar números aleatorios
numero1 = rand(); //Número entre 0 y MAX_RAND
numero2 = rand() % 128; //Número entre 0 y 127
printf("%u %u\n", numero1, numero2);
return 0;
}
Si buscamos números con mayor entropía, dependeremos del SO.
Linux:
#include <stdio.h>
#include <fcntl.h>
int main() {
unsigned int numero1, numero2;
int Archivo = open("/dev/random", O_RDONLY);
read(Archivo, &numero1, sizeof(numero1)); //Número en todo el rango
de los enteros
read(Archivo, &numero2, sizeof(numero2));
close(Archivo);
numero2 = numero2 % 128; //Número entre 0 y 127
printf("%u %u\n", numero1, numero2);
return 0;
}
Windows:
#include <stdio.h>
#include <fcntl.h>
#include <windows.h>
#include <wincrypt.h>
int main() {
unsigned int numero1, numero2;
HCRYPTPROV /hProv;/
CryptAcquireContext(&hProv, NULL, NULL, PROV_RSA_AES, CRYPT_VERIFYCONTEXT);
CryptGenRandom(hProv, sizeof(numero1), (BYTE*)&numero1); //Número en todo el rango de los enteros
CryptGenRandom(hProv, sizeof(numero2), (BYTE*)&numero2);
*CryptReleaseContext*
<http://msdn.microsoft.com/en-us/library/aa380268%28VS.85%29.aspx>(hProv,
0);
numero2 = numero2 % 128; //Número entre 0 y 127
printf("%u %u\n", numero1, numero2);
return 0;
}
Ten en cuenta que en ambos casos haría falta comprobar si hubo errores
en cada uno de los pasos.
Más información sobre la lista de distribución Cconclase