Autor
|
Tema: Problema con rand() (Leído 2,447 veces)
|
MrDev
Desconectado
Mensajes: 31
|
Pues tengo un problema, y es que no me da los valores como numeros, me los da como direcciones de memoria supongo que son. Igualmente al poner en el main al principio "in t p=rand();" me daba un 0 todo el rato, aqui dejo el codigo a ver si me podeis echar una manilla. #include <stdio.h> #include <stdlib.h> #include <time.h> char* crearPassword(); int main(int argc, const char * argv[]) { char* contrasena=crearPassword(); return 0; } char* crearPassword(){ int i; char numero,aleatorio; char *password =malloc(8*sizeof(char))+1; for(i=0;i<4;i++){ password [i ]=(int)rand()%10; } for(i=4;i<8;i++){ do{ aleatorio =(char)rand()%123; }while(aleatorio<65 && aleatorio>122); password[i]=aleatorio; } return password; }
|
|
|
En línea
|
|
|
|
class_OpenGL
Desconectado
Mensajes: 437
Si usas Direct3D, no eres mi amigo :P
|
do{ aleatorio=(char)rand()%123; }while(aleatorio<65 && aleatorio>122);
A ver una cosilla. El número aleatorio está entre 0 y 122, por lo que nunca va a ser mayor que 122. Lo que tendrías que hacer es calcular un número aleatorio entre 0 y la diferencia de 122 y 65, y luego sumarle 65 (aleatorio = (char)rand()%(122-65) + 65;). También tienes que tener en cuenta que tienes que cambiar la semilla del generador de números aleatorios (rand()) con la función srand cada vez que generes un número aleatorio. Te aconsejo que uses srand(clock()).
|
|
|
En línea
|
| Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL |
|
|
|
|
MrDev
Desconectado
Mensajes: 31
|
do{ aleatorio=(char)rand()%123; }while(aleatorio<65 && aleatorio>122);
A ver una cosilla. El número aleatorio está entre 0 y 122, por lo que nunca va a ser mayor que 122. Lo que tendrías que hacer es calcular un número aleatorio entre 0 y la diferencia de 122 y 65, y luego sumarle 65 (aleatorio = (char)rand()%(122-65) + 65;). También tienes que tener en cuenta que tienes que cambiar la semilla del generador de números aleatorios (rand()) con la función srand cada vez que generes un número aleatorio. Te aconsejo que uses srand(clock()). Gracias por la respuesta compi. Edito, el problema es que en el primer bucle for de la funcion, no guarda en password los numeros
|
|
« Última modificación: 12 Abril 2016, 23:14 pm por MrDev »
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
char *password =malloc(8*sizeof(char))+1;
Esto está mal. malloc te asigna una zona de memoria pero devuelves la posición 1 byte superior. Tal vez quisiste decir: char *password =malloc((8+1)*sizeof(char));
para guardar la cadena más el caracter nulo. Pero tampoco convence ya que rand podría generarte un 0 cuándo estás consiguiendo los números, con lo que la cadena resultante acabaría en ese momento. Por otra parte no estás escribiendo caracteres numéricos sino caracteres de control ASCII no imprimibles, por lo que a la hora de visualizar la cadena podrían aparecer efectos extraños en pantalla. Tal vez quisiste decir: for(i=0;i<4;i++) password [i ]=(int)rand()%10+'0';
; Más. Si usas malloc para asignar memoria debes usar free para liberarla en cuanto no la uses. La penúltima instrucción de tu programa debería ser
|
|
« Última modificación: 12 Abril 2016, 23:23 pm por MAFUS »
|
En línea
|
|
|
|
MrDev
Desconectado
Mensajes: 31
|
char *password =malloc(8*sizeof(char))+1;
Esto está mal. malloc te asigna una zona de memoria pero devuelves la posición 1 byte superior. Tal vez quisiste decir: char *password =malloc((8+1)*sizeof(char));
para guardar la cadena más el caracter nulo. Pero tampoco convence ya que rand podría generarte un 0 cuándo estás consiguiendo los números, con lo que la cadena resultante acabaría en ese momento. Por otra parte no estás escribiendo caracteres numéricos sino caracteres de control ASCII no imprimibles, por lo que a la hora de visualizar la cadena podrían aparecer efectos extraños en pantalla. Tal vez quisiste decir: for(i=0;i<4;i++) password [i ]=(int)rand()%10+'0';
; Más. Si usas malloc para asignar memoria debes usar free para liberarla en cuanto no la uses. La penúltima instrucción de tu programa debería ser
Gracias por tu respuesta compi, ya esta el programa listo. Una duda, en el for(i=0;i<4;i++) password [i ]=(int)rand()%10+'0';
; Por que no funciona sin el "'+0'"?
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
El hecho es que tu generas un carácter del ASCII 0 al ASCII 9, que son caracteres no imprimibles. Busca una tabla en internet de código ASCII y verás lo que digo. Pero al sumar '0' al resultado del rand lo que haces es llevar ese resultado al caracter ASCII '0' que ese sí ya es la representación del cero. ASCII dice que los caracteres numéricos van del cero hasta el nueve. Por tanto '0' + 0 es '0', '0' + 1 es '1', '0' + 2 es '2', etc. Si te fijas lo mismo pasa con las letras: 'a' + 0 es 'a', 'a' + 1 es 'b'... 'A' + 0 es 'A', 'A' + 1 es 'B'...
|
|
|
En línea
|
|
|
|
MrDev
Desconectado
Mensajes: 31
|
El hecho es que tu generas un carácter del ASCII 0 al ASCII 9, que son caracteres no imprimibles. Busca una tabla en internet de código ASCII y verás lo que digo. Pero al sumar '0' al resultado del rand lo que haces es llevar ese resultado al caracter ASCII '0' que ese sí ya es la representación del cero. ASCII dice que los caracteres numéricos van del cero hasta el nueve. Por tanto '0' + 0 es '0', '0' + 1 es '1', '0' + 2 es '2', etc. Si te fijas lo mismo pasa con las letras: 'a' + 0 es 'a', 'a' + 1 es 'b'... 'A' + 0 es 'A', 'A' + 1 es 'B'...
Gracias, ya lo entiendo, se aprende bastante en foros
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Solucionado]Problema con rand() y arreglos.
Programación C/C++
|
GROV
|
2
|
3,755
|
16 Julio 2012, 21:32 pm
por GROV
|
|
|
Problema con rand y srand en este codigo
Programación C/C++
|
pacosn1111
|
6
|
2,891
|
26 Abril 2015, 20:09 pm
por Miky Gonzalez
|
|
|
(Consulta) Problema con rand en C - Problema de multiple Choice
Programación C/C++
|
palacio29
|
3
|
2,836
|
20 Julio 2016, 18:38 pm
por palacio29
|
|
|
(Consulta) Problema con rand en C - Problema de multiple Choice
Programación C/C++
|
palacio29
|
1
|
2,647
|
25 Julio 2016, 17:54 pm
por AlbertoBSD
|
|
|
problema en rand()
Programación C/C++
|
anonym2003
|
1
|
1,426
|
22 Febrero 2017, 22:55 pm
por ivancea96
|
|