elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Me crashea el programa
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: Me crashea el programa  (Leído 6,738 veces)
jaxoR

Desconectado Desconectado

Mensajes: 93

?


Ver Perfil WWW
Re: Me crashea el programa
« Respuesta #10 en: 13 Marzo 2014, 20:29 pm »

Tengo el libro de como programar en C/C++ de deitel. Pero en el libro nunca especifica de terminar el rand.

PD: Seguí adelante con el programa, pero me sigue crasheando, en cuanto ingreso 1 me crashea:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main()
  5. {
  6.    int a, i, j, k, f;
  7.    int b[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  8.    char c[] = {'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '\0'};
  9.    printf("==========================\n== Generador de codigos ==\n==========================\n\n* Ingrese 1 si quiere generar un codigo\n");
  10.    scanf("%i", &a);
  11.  
  12.    char letra[5];
  13.    int numero[5];
  14.    i = 0;
  15.  
  16.    if (a != 1)
  17.    {
  18.        printf("Necesitas ingresar el numero 1 para generar un codigo\n");
  19.    }
  20.  
  21.    if (a == 1)
  22.    {
  23.        for(j=0; j < 5; j++)
  24.        {
  25.            i++;
  26.            k = 0;
  27.            k = 1 + rand() % 23;
  28.            letra[i] = c[k];
  29.        }
  30.  
  31.        i = 0;
  32.        j = 0;
  33.        f = 0;
  34.  
  35.        for(j=0; j < 5; j++)
  36.        {
  37.            i++;
  38.            f = 0;
  39.            f = 1 + rand() % 9;
  40.            numero[i] = b[f];
  41.        }
  42.  
  43.  
  44.        printf("%s %s %s %s %s %i %i %i %i %i", letra[0], letra[1], letra[2], letra[3], letra[4], numero[0], numero[1], numero[2], numero[3], numero[4]);
  45.  
  46.    }
  47.  
  48.    return 0;
  49. }


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Me crashea el programa
« Respuesta #11 en: 13 Marzo 2014, 20:59 pm »

si haces

Código
  1. printf("%s", letra[0] );

estás imprimiendo una cadena... una cadena es una secuencia de caracteres que acaba en el caracter '\0'. Dado que en tu caso, letra tiene una secuencia de caracteres que no termina en '\0', el programa seguirá imprimiendo el contenido de la memoria adyacente a letra y eso hace que el programa se muera.

Si lo que quieres es imprimir un caracter tienes que cambiar el printf por

Código
  1. printf( "%c", letra[0] );


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Me crashea el programa
« Respuesta #12 en: 13 Marzo 2014, 21:24 pm »

Yo le aconsejaría revisarlo todo ya que hay variables de más, falta la librería time.h, no inicializa rand, haría falta bajo mi punto de vista un bucle por si no introduce 1.

En fin, te lo dejo funcionando. Ya es cosa tuya mejorarlo:


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int main(){
  6.    srand((unsigned) time(NULL));
  7.    int a, j, k=0, f=0;
  8.    int b[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
  9.    char c[] = {"abcdefghijklmnopqrstuvwxys"};
  10.    char letra[5];
  11.    int numero[5];
  12.    do{
  13.      printf("==========================\n== Generador de codigos ==\n==========================\n\n* Ingrese 1 si quiere generar un codigo\n");
  14.      scanf("%d", &a);
  15.      if (a != 1)
  16.        printf("Necesitas ingresar el numero 1 para generar un codigo\n");
  17.    }while(a != 1);
  18.    for(j=0; j < 5; j++) {
  19.      k = 1 + rand() % 25;
  20.      letra[j] = c[k];
  21.    }
  22.     for(j=0; j < 5; j++){
  23.      f = 1 + rand() % 9;
  24.      numero[j] = b[f];
  25.    }
  26.    printf("%c %c %c %c %c %d %d %d %d %d", letra[0], letra[1], letra[2], letra[3], letra[4], numero[0], numero[1], numero[2], numero[3], numero[4]);
  27.    return 0;
  28. }

¡¡¡¡ Saluditos! ..... !!!!




 
« Última modificación: 13 Marzo 2014, 21:27 pm por leosansan » En línea

jaxoR

Desconectado Desconectado

Mensajes: 93

?


Ver Perfil WWW
Re: Me crashea el programa
« Respuesta #13 en: 13 Marzo 2014, 21:37 pm »

Dos preguntas:

Para que sirve el include time.h y que hace esto?

Código
  1. srand((unsigned) time(NULL));
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Me crashea el programa
« Respuesta #14 en: 13 Marzo 2014, 21:53 pm »

Deberías conseguir y leer con tranquilidad un manual de C. Te dará muchas más satisfacciones que darte de cabezazos con estas cosas. Es un consejo.

los includes sirven para enlazar con código externo.

Código
  1. #include <time.h>

se sustituye por el contenido del archivo "time.h". De esta forma el compilador es capaz de encontrar las funciones definidas dentro de este archivo ( en este caso la función time().

Para saber qué hace la línea

Código
  1. srand((unsigned)time(NULL));

Deberías descomponerla en instrucciones simples:

Código
  1. // Esta linea te devuelve la fecha y la hora actuales.
  2. // Realmente almacena el numero de segundos desde el 01/01/1970 a las 00:00
  3. time_t tiempo = time(NULL);
  4.  
  5. // Esta linea convierte el valor anterior en un tipo basico de C, un entero sin signo.
  6. unsigned int valor = (unsigned)tiempo;
  7.  
  8. // Esta linea inicializa el generador de numeros aleatorios.
  9. // Pasarle el tiempo es una forma de que la semilla inicial sea mas o menos aleatoria.
  10. srand(valor);

En cualquier caso, en serio, consigue un buen manual de C y empieza a leerlo sin prisa. Adquirir una buena base es más importante que aprender a tirar líneas de código.
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Me crashea el programa
« Respuesta #15 en: 14 Marzo 2014, 02:38 am »

Dos preguntas:

Para que sirve el include time.h y que hace esto?

Código
  1. srand((unsigned) time(NULL));
Tienes que leer con mas cuidado el tema, eso lo respondí en mi primer mensaje:
Aparte de todo lo dicho falta inicializar la semilla para los números aleatorios, esto puede hacerse con:
Código
  1. #include <stdlib.h>
  2. #include <time.h>
  3.  
  4. /* ... */
  5.  
  6. int main(void)
  7. {
  8.   /* ... */
  9.  
  10.   srand((unsigned) time(NULL));
  11.  
  12.   /* Uso de rand ...  */
  13. }
Antes de utilizar rand y srand se debe incluir <stdlib.h>, antes de time <time.h>.


Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: Me crashea el programa
« Respuesta #16 en: 14 Marzo 2014, 07:02 am »


Una pequeña observación: no guardas el código entero en ninguna parte.

Esto lo puedes solventar usando el mismo array letra con las letras y los números.

Otra cosita: el código puede considerarse débil, en el sentido de que van letras seguidas de números. Podrías hacerlo más fuerte entremezclando los números con las letras como te indico a continuación:


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4.  
  5. int main(){
  6.    srand((unsigned) time(NULL));
  7.    int a, j, k=0, f=0,cont=0;
  8.    char c[] = {"abcdefghijklmnopqrstuvwxys0123456789"};
  9.    char letra[11],codigo[11];
  10.    for(j=0; j < 11; j++)
  11.      codigo[j]='A';
  12.    do{
  13.      printf("==========================\n== Generador de codigos ==\n==========================\n\n* Ingrese 1 si quiere generar un codigo\n");
  14.      scanf("%d", &a);
  15.      if (a != 1)
  16.        printf("Necesitas ingresar el numero 1 para generar un codigo\n");
  17.    }while(a != 1);
  18.    for(j=0; j < 5; j++) {
  19.      k = rand() % 26;
  20.      letra[j] = c[k];
  21.    }
  22.    for(j=5; j < 10; j++){
  23.      f = 26 + rand() % 10;
  24.      letra[j] = c[f];
  25.    }
  26.    letra[j]='\0';
  27.    printf("%s\n", letra);
  28.    ///printf("%d   %s\n", j,letra);
  29.    for (j=0;j<10;j++){
  30.    j=0;
  31.    do{
  32.      k=rand ()%10;
  33.      if (codigo[j]=='A' && letra[k]!='A'){
  34.        codigo[j]=letra[k];
  35.        letra[k]='A';
  36.        j++;
  37.      }
  38.      }while (j<10);
  39.      codigo[10]='\0';
  40.    }
  41.    printf("%s\n", codigo);
  42.    return 0;
  43. }

También puedes hacerlo aún más fuerte usando más caracteres en el array letra, como /*/#@, etc.

¡¡¡¡ Saluditos! ..... !!!!


En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programa crashea al escribir
Ingeniería Inversa
x64core 0 1,839 Último mensaje 23 Septiembre 2012, 02:07 am
por x64core
Me crashea el programa
Programación C/C++
jaxoR 2 2,206 Último mensaje 30 Mayo 2014, 02:42 am
por Yoel Alejandro
(Solucionado) Un programa sencillo usando las librerías GLFW y GLEW crashea
Programación C/C++
Seyro97 1 1,677 Último mensaje 14 Mayo 2015, 20:04 pm
por Seyro97
(Ayuda) Programa crashea al analizar una cadena (char *) « 1 2 »
Programación C/C++
Seyro97 14 5,386 Último mensaje 27 Mayo 2015, 09:18 am
por Eternal Idol
(Ayuda) Programa crashea al acceder al último término de una matriz
Programación C/C++
Seyro97 1 1,518 Último mensaje 2 Octubre 2015, 08:11 am
por Seyro97
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines