Antes de nada, el codigo del progrma:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
main(){
struct{
char nombre[40];
int edad;
char lugarResidencia[100];
}persona;
FILE *fichero;
char linea[80];
printf("Introduzca nombre: ");
gets(persona.nombre);
printf("Introduzca edad: ");
scanf("%d",&persona.edad);
getchar();
printf("Lugar de residencia: ");
gets(persona.lugarResidencia);
fichero=fopen("gente.dat","w");
fputs(persona.nombre,fichero);
fputs(persona.lugarResidencia,fichero);
fprintf(fichero,"%d",&persona.edad);
fclose(fichero);
fichero=fopen("gente.dat","r");
fgets(linea,strlen(persona.nombre)+1,fichero);
printf("Se llama: ");
puts(linea);
fscanf(fichero,"%d",&persona.edad);
printf("Tiene %d años",persona.edad);
fgets(linea,strlen(persona.lugarResidencia)+1,fichero);
printf("\nVive en: ");
puts(linea);
system("PAUSE");
fclose(fichero);
}
El programa funciona perfecto, pero cuando abro el fichero, la variable edad del struct no la guarda bien, y se inventa el valor. ¿Alguien sabe cual puede ser el fallo?
Gracias
Fijate en los warnings al compilar:
26: warning: format '%d' expects type 'int', but argument 3 has type 'int *'
Deberías de modificar la forma en que pasas el parámetro edad de la estructura.
l.c:(.text+0x30): warning: the `gets' function is dangerous and should not be used.
Pasate por aqui:
https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html
Gr1nD3r, bienvenid@!
Te recomiendo usar las etiquetas GeSHI o code para postear codigo fuente para que sea mas legible, utiliza el boton modificar
Te invito a que pases por estos temas...
Deberias leer algo sobre escritura y lectura de ficheros, particularmente para empezar te recomiendo que leas estos libros...
> El Lenguaje de Programación C - Brian W. Kernighan, Dennis M. Ritchie
> Cómo Programar en C/C++ - Harvey M. Deitel, Paul J. Deitel
https://foro.elhacker.net/programacion_cc/librospapers_c_and_c-t296234.0.html
main()
gets(...)
https://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html
No es recomendable hacer llamadas al sistema para hacer una pausa en el programa, ademas sumandole que no es para nada portable
Salu10.
Otra pregunta: Que compiladores usais???
Gr1nD3r, utilizo GCC en GNU/Linux
Si usas Windows te recomiendo usar el compilador de VisualC++, MinGW o Cygwin (estos 2 ultimos son GCC, en sus versiones para Microsoft)
Por favor te ruego no usar el compilador de Borland ;D
Salu10.
Ok. Yo siempre he utilizado Dev-C++ con Mingw
Cita de: Gr1nD3r en 18 Julio 2010, 02:18 AM
Ok. Yo siempre he utilizado Dev-C++ con Mingw
También uso gcc. Que raro, en el ide no te mostraba los warnings? :-\
K va. No me muestra ningun Warning
Te recomiendo CodeBlocks.