Test Foro de elhacker.net SMF 2.1

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


#include<stdio.h>
#include<stdlib.h>
#include<time.h>

char cadena[10]={'0','1','2','3','4','5','6','7','8','9'};

int main()
{
   srand(time(NULL)); //Para que los numeros sean realmente aleatorios
   int i; //contador
   char digito[4];
   printf("Los 4 caracteres generados aleatoriamente son: ");
   for(i=0;i<=4;i++)
   {
       digito[i]=cadena[rand() % 50]; //numero aleatorio entre 0 y 35
       printf("%c",digito[i]);
   }
   printf("\n");
   system("pause");
   return 0;
}


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
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
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)