Pin y contraseña

Iniciado por galatea, 24 Junio 2020, 19:46 PM

0 Miembros y 1 Visitante están viendo este tema.

galatea

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

Kenji-chan

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)

K-YreX

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>.
Código (cpp) [Seleccionar]

cout << "Todos tenemos un defecto, un error en nuestro código" << endl;

EmaTomA


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: