Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: galatea en 24 Junio 2020, 19:46 pm



Título: Pin y contraseña
Publicado por: galatea en 24 Junio 2020, 19:46 pm
Hola, me piden que genere un pin de 4 digitos sin digitos consecutivos iguales. Tengo este avance para generar un pin...pero A. me salen letras, no se por que; B. No se cómo hacer lo que no tenga dígitos consecutivos iguales. Soy nuevisima en esto...¿me podrán ayudar? (Estoy trabajando con CodeBlocks, no se si eso influye)
Muchas Gracias

Código
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<time.h>
  4.  
  5. char cadena[10]={'0','1','2','3','4','5','6','7','8','9'};
  6.  
  7. int main()
  8. {
  9.    srand(time(NULL)); //Para que los numeros sean realmente aleatorios
  10.    int i; //contador
  11.    char digito[4];
  12.    printf("Los 4 caracteres generados aleatoriamente son: ");
  13.    for(i=0;i<=4;i++)
  14.    {
  15.        digito[i]=cadena[rand() % 50]; //numero aleatorio entre 0 y 35
  16.        printf("%c",digito[i]);
  17.    }
  18.    printf("\n");
  19.    system("pause");
  20.    return 0;
  21. }

MOD: Etiquetas de Código GeSHi para los códigos


Título: Re: Pin y contraseña
Publicado por: Kenji-chan en 24 Junio 2020, 20:52 pm
Verás al declarar tu variable
Código
  1. char cadena[10]={'0','1','2','3','4','5','6','7','8','9'};
la defines con una longitud de 10 a la vez que la rellenas y cuando haces
Código
  1. digito=cadena[rand() % 50]; //numero aleatorio entre 0 y 35
le estás diciendo a digito[0] que es igual a cadena[35] (35 digamos que es el número aleatorio que nos generó en esa iteración)  pero anterior mente definimos a cadena con una longitud de 10 a si que cadena[35] está accediendo a un espacio de memoria no definida y dígito  no está cambiando su posición en ningún momento (deberías de poner digito)


Título: Re: Pin y contraseña
Publicado por: K-YreX en 26 Junio 2020, 02:48 am
Como ya te han dicho, estás accediendo a posiciones de memoria desconocidas. Además el número aleatorio que generas no está entre 0 y 35 sino entre 0 y 49. Tendrías que hacer que el número aleatorio esté entre 0 y 9 mediante: (rand() % 10).

Otro problema a tener en cuenta es que no generas 4 dígitos mediante el bucle for() sino 5. Desde i = 0 hasta i <= 4 son: {0,1,2,3,4} 5 repeticiones.

Y un consejo extra: no utilices system("pause") para hacer una pausa en el programa. Utiliza getchar() que pertenece a la biblioteca <stdio.h>.


Título: Re: Pin y contraseña
Publicado por: EmaTomA en 9 Julio 2020, 13:26 pm

1 -> char esta declarado fuera de main.
2 -> tienes la cadena con las memorias declaradas, te recomiendo inicializarlas en 0.
3 -> Es normal que te salgan letras, si pides que te imprima un caracter ascii con %c
4 -> La funcion dentro de for no tiene logica.
5 -> para capar un numero aleatorio y caparlo a un maximo usa:

           (https://i.ibb.co/sbxhxCx/code.png)