Me crashea el programa

Iniciado por jaxoR, 12 Marzo 2014, 16:50 PM

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

jaxoR

Bueno, mi problema es que el programa me crashea al poner 1 para que genere el codigo. El code no está terminado pero no puedo terminar de resolver eso:

Código (cpp) [Seleccionar]
int main()
{
   int a, i, j, k, f;
   int b[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
   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'};
   printf("==========================\n== Generador de codigos ==\n==========================\n\n* Ingrese 1 si quiere generar un codigo\n");
   scanf("%i", &a);

   char letra[5];

   if (!(a = 1))
   {
       printf("Necesitas ingresar el numero 1 para generar un codigo\n");
   }

   if (a = 1)
   {
       printf("En breve se generara tu codigo\n");

       for(j=0; j=5; j++)
       {
           i++;
           k = 0;
           k = 1 + rand() % 23;
           c[k] = letra[i];
       }
   }

   return 0;
}

eferion

Código (cpp) [Seleccionar]
int main()
{
  int a;

  scanf("%i", &a);
 
  if (!(a = 1))
  {
  }

  if (a = 1)
  {
  }
}


Eso está mal se mire por donde se mire:

* !(a=1) es equivalente a !1... luego ese if NUNCA se ejecutará
* (a=1) es equivalente a 1... el segundo if se ejecutará SIEMPRE.

La forma correcta de ponerlo es usando los operadores de comparación:


  if ( a != 1 )
  {
  }

  if (a == 1)
  {
  }
}


o mejor aún:


  if ( a != 1 )
  {
  }
  else
  {
  }
}


Luego, quitando eso, creo que deberías fijarte en la variable "i"... que no se inicializa en la vida... al no inicializarse, en "letra" vas a acceder a una posición de memoria incorrecta y el programa acabará con un bonito pantallazo.

Stakewinner00

  char letra[5]; que valores tiene?

eferion

Cita de: Stakewinner00 en 12 Marzo 2014, 17:09 PM
  char letra[5]; que valores tiene?

Tiene valores aleatorios... pero esas 5 posiciones están reservadas para la aplicación... otra cosa es que intentes acceder a letra[4561234]...

Sinceramente a mí me da la impresión que más que letra quería poner c.

Stakewinner00

Cita de: eferion en 12 Marzo 2014, 17:12 PM
Tiene valores aleatorios... pero esas 5 posiciones están reservadas para la aplicación... otra cosa es que intentes acceder a letra[4561234]...

Sinceramente a mí me da la impresión que más que letra quería poner c.

Por eso hice la pregunta, por que me da que se descuido de algo ahí xD.

De paso podrías usar un if else en vez de dos if como te dijo eferion

Saludos

Gh057

hola wiD^ estaba escribiendo los errores de sintaxis por ejemplo en la igualdad de la condición pero ya te fueron muy bien indicados; con respecto a la función aleatoria, deberías chequear la misma ya que al sumarle 1 no estás contemplando todas las k para el char c. (no tendrás nunca el valor para 'a' y luego creo que superas la cantidad de posiciones para el tope) saludos.
4 d0nd3 1r4 3l gh057? l4 r3d 3s 74n v4s74 3 1nf1n1t4...

jaxoR

Gracias por toda la ayuda, pero me sigue crasheando el programa. Ahora lo tengo así:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main()
{
    int a, i, j, k, f;
    int b[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
    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'};
    printf("==========================\n== Generador de codigos ==\n==========================\n\n* Ingrese 1 si quiere generar un codigo\n");
    scanf("%i", &a);

    char letra[5];
    i = 0;

    if (a != 1)
    {
        printf("Necesitas ingresar el numero 1 para generar un codigo\n");
    }

    if (a == 1)
    {
        printf("En breve se generara tu codigo\n");

        for(j=0; j=5; j++)
        {
            i++;
            k = 0;
            k = 1 + rand() % 23;
            c[k] = letra[i];
        }
    }

    return 0;
}

amchacon

La condición del for es erronea.

¿Porque usas letra? Usa letra[j].
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

Yugget

Como bien dice amchacon,
La condición for es errónea,

Estás dandole un valor a j = 0 y luego dandole de nuevo otro valor a j = 5.

Y para el for sería asín:

Código (cpp) [Seleccionar]
for(j=0; j < 5; j++)
{

}


Da un valor a j = 0, y si j es menor que 5, se incrementará.

Un cordial saludo.

rir3760

Aparte de todo lo dicho falta inicializar la semilla para los números aleatorios, esto puede hacerse con:
#include <stdlib.h>
#include <time.h>

/* ... */

int main(void)
{
   /* ... */
   
   srand((unsigned) time(NULL));
   
   /* Uso de rand ...  */
}


Y en el bucle la primera asignación a la variable "k" sobra, la asignación "c[ k ] = letra[ i ];" esta al revés (debería ser "letra[ i ] = c[ k ];") y por ultimo si se trata de una cadena falta agregar el terminador '\0'.

Cita de: wiD^ en 12 Marzo 2014, 16:50 PMEl code no está terminado pero no puedo terminar de resolver eso
En buen plan deberías conseguir un buen curso o libro, para recomendaciones solo tienes que utilizar el motor de búsqueda de los foros.

Un saludo
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