Autor
|
Tema: Problema con Ejecutable (Leído 1,864 veces)
|
arkangel2006
Desconectado
Mensajes: 4
|
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
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
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
|
|
|
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
Mensajes: 4
|
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
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Problema VB (Problemas con el Ejecutable)
Programación Visual Basic
|
~ Ghost_Networks ~
|
2
|
1,913
|
24 Mayo 2011, 16:13 pm
por ~ Ghost_Networks ~
|
|
|
¿Generar un ejecutable con configuraciones personalizadas desde otro ejecutable?
.NET (C#, VB.NET, ASP)
|
Crazy.sx
|
6
|
6,072
|
26 Noviembre 2012, 13:37 pm
por Novlucker
|
|
|
Problema con ejecutable de visual
.NET (C#, VB.NET, ASP)
|
birdez
|
4
|
3,410
|
5 Febrero 2013, 16:10 pm
por seba123neo
|
|
|
Problema al crear un ejecutable (Solucionado)
Java
|
nolasco281
|
2
|
2,245
|
14 Junio 2014, 13:01 pm
por nolasco281
|
|
|
Problema al convertir un script en ejecutable
« 1 2 »
Scripting
|
invu
|
11
|
7,699
|
26 Junio 2021, 04:21 am
por painpills
|
|