Título: Problema con Ejecutable
Publicado por: arkangel2006 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... #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 (http://www.subirimagenes.net/i/150313030930376587.jpg)
Título: Re: Problema con Ejecutable
Publicado por: rir3760 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: if ((f = fopen("listin.bin","r+b")) == NULL ){ return 1; }
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: printf("Número de teléfono "); scanf("%dl",&d. telefono);
Ya que el especificador para el tipo long es "%ld". Un saludo
Título: Re: Problema con Ejecutable
Publicado por: arkangel2006 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.
|