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

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problema con Ejecutable
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema con Ejecutable  (Leído 1,537 veces)
arkangel2006

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Problema con Ejecutable
« en: 13 Marzo 2015, 03:10 am »

Hola  buen dia realizado un codigo en C y al momento de compilar me dice que no hay errores pero el problema que cuando abre el ejecutable muestra un error, ya descarte que sea problema del compilador  debido a que otros  codigos si me ejecuta bien...

les dejo el codigo para que medigan si acaso es alguna parte que tengo mal programada-escrito...

Código:

#include <stdio.h>
#include <stdlib.h>
#define LNOMBRE 50
#define LDIRECCION 100
   typedef struct
   {
      char nombre[LNOMBRE];          /* Nombre */
      char direccion[LDIRECCION];    /* Dirección */
      long telefono;                 /* Teléfono */
   } TipoDato;
/* Lee un dato desde el registro indicado */
   int leeDato(FILE *fichero, TipoDato *dato, int pos)
   {
      if(fseek(fichero,pos*sizeof(TipoDato),SEEK_SET))
         return 0;
      return fread(dato, sizeof(TipoDato),1,fichero)==1;
   }
/* Escribe un dato desde el registro indicado */
   int escribeDato(FILE *fichero, TipoDato *dato, int pos)
   {
      if(fseek(fichero,pos*sizeof(TipoDato),SEEK_SET))
         return 0;
      return fwrite(dato, sizeof(TipoDato),1,fichero)==1;
   }
/* Añade un dato al final del fichero */
   int anadeDato(FILE *fichero, TipoDato *dato)
   {
      if(fseek(fichero,0,SEEK_END))
         return 0;
      return fwrite(dato, sizeof(TipoDato),1,fichero)==1;
   }
/*Programa de prueba que aleatoriamente añade o modifica */
   int main()
   {
      int i,nreg,anade,res;
      FILE *f;
      TipoDato d;
      if((f=fopen("listin.bin","r+b"))== NULL)
         return 1;
   /*Muestra los datos*/
      for(i=0; ; i++)
         if(leeDato(f,&d,i))
            printf("Registro :%d\nNombre: %s\nDireccion: %s\nTelefono : %dl\n",
                  i+1,d.nombre,d.direccion, d.telefono);
         else
            break;
      anade=rand()%2;
      if(anade)
         printf("Adición de registro\n");
      else
      {
         printf("Modificación de registro\n");
         printf("Número de registro ");
         scanf("%d",&nreg);
         gets(d.nombre);  /* Se lee el final de línea que queda */
      }
      printf("Nombre ");
      gets(d.nombre);
      printf("Dirección ");
      gets(d.direccion);
      printf("Número de teléfono ");
      scanf("%dl",&d.telefono);
      if(anade)
         res=anadeDato(f,&d);
      else
         res=escribeDato(f,&d,nreg-1);
      if(!res)
         printf("Error\n");
      fclose(f);
      return 0;
}


esta es lo que me muestra el ejecutable:
http://www.subirimagenes.net/i/150313030930376587.jpg


En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problema con Ejecutable
« Respuesta #1 en: 13 Marzo 2015, 03:52 am »

El programa termina retornando el valor uno y ese valor lo retorna tu programa si la apertura del archivo falla, ya que utilizas el modo "r+b" el archivo debe existir. Para estar seguros cambia la verificación de fopen a:
Código
  1. if ((f = fopen("listin.bin","r+b")) == NULL){
  2.   perror("listin.bin");
  3.   return 1;
  4. }

Aparte de eso hay que evitar el uso de gets ya que esta puede causar el error en tiempo de ejecución si el destino de datos se desborda y por ultimo hay que cambiar esta llamada a scanf:
Código
  1. printf("Número de teléfono ");
  2. scanf("%dl",&d.telefono);
Ya que el especificador para el tipo long es "%ld".

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
arkangel2006

Desconectado Desconectado

Mensajes: 4


Ver Perfil
Re: Problema con Ejecutable
« Respuesta #2 en: 13 Marzo 2015, 04:40 am »

Gracias por responder Maestro rir3760 con esas observaciones e me hisistes  funcionar el programa y tendre encuenta tu comentario de el uso de gets  Dios te bendiga.   
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines