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