Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Gr1nD3r en 29 Julio 2010, 20:38 pm



Título: ayuda fread
Publicado por: Gr1nD3r en 29 Julio 2010, 20:38 pm
Código:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

main(){
struct{
char nombre[50];
char direccion[100];
char movil[10];
char email[100];
short int nDia;
short int nMes;
short int nAno;
}persona[100];
int i;
int numeroFicha=0;
int opcion=1;
char textoTemporal[40];
FILE *fichero;

printf("1.- A%adir ficha nueva\n\n",164);
printf("2.- Visualizar nombres de fichas existentes\n\n");
printf("3.- Buscar por nombre\n\n");

while(opcion != 0){
printf("Teclee su opcion: ");
gets(textoTemporal);
sscanf(textoTemporal,"%d",&opcion);

switch(opcion){
case 1:
if(numeroFicha<100){
fichero=fopen("gente.dat","ab");
printf("Nombre: ");
gets(persona[numeroFicha].nombre);
printf("Direccion: ");
gets(persona[numeroFicha].direccion);
printf("Telefono movil: ");
gets(persona[numeroFicha].movil);
printf("Email: ");
gets(persona[numeroFicha].email);
printf("Dia de nacimiento: ");
gets(textoTemporal);
sscanf(textoTemporal,"%d",&persona[numeroFicha].nDia);
printf("Mes de nacimiento: ");
gets(textoTemporal);
sscanf(textoTemporal,"%d",&persona[numeroFicha].nMes);
printf("Año de nacimiento: ");
gets(textoTemporal);
sscanf(textoTemporal,"%d",&persona[numeroFicha].nAno);
fwrite(persona[numeroFicha].nombre,1,sizeof(persona[numeroFicha].nombre),fichero);
fwrite(persona[numeroFicha].direccion,1,sizeof(persona[numeroFicha].direccion),fichero);
fwrite(persona[numeroFicha].movil,1,sizeof(persona[numeroFicha].movil),fichero);
fwrite(persona[numeroFicha].email,1,sizeof(persona[numeroFicha].email),fichero);
fwrite(&persona[numeroFicha].nDia,sizeof(persona[numeroFicha].nDia),1,fichero);
fwrite(&persona[numeroFicha].nMes,sizeof(persona[numeroFicha].nMes),1,fichero);
fwrite(&persona[numeroFicha].nAno,sizeof(persona[numeroFicha].nAno),1,fichero);
numeroFicha++;
fclose(fichero);
}
else{
printf("Limite de fichas alcanzado");
}
break;
case 2:
fichero=fopen("gente.dat","rb");
for(i=0;i<numeroFicha;i++){
fread(persona[i].nombre,1,sizeof(persona[i].nombre),fichero);
puts(persona[i].nombre);
fread(persona[i].direccion,1,sizeof(persona[i].direccion),fichero);
fread(persona[i].movil,1,sizeof(persona[i].movil),fichero);
fread(persona[i].email,1,sizeof(persona[i].email),fichero);
fread(&persona[i].nDia,sizeof(persona[i].nDia),1,fichero);
fread(&persona[i].nMes,sizeof(persona[i].nMes),1,fichero);
fread(&persona[i].nAno,sizeof(persona[i].nAno),1,fichero);
}
fclose(fichero);
break;
}
}
}

Alguien sabe por que no se muestran los nombres de las fichas por pantalla cuando escojo la 2ª opcion???
gracias


Título: Re: ayuda fread
Publicado por: bizco en 29 Julio 2010, 20:40 pm
veo visiones? me salia el codigo en una marquesina de lado a lado  :o


Título: Re: ayuda fread
Publicado por: .:BlackCoder:. en 29 Julio 2010, 20:42 pm
A mi tambien  :xD igual no manejo archivos en C...


Título: Re: ayuda fread
Publicado por: Gr1nD3r en 29 Julio 2010, 20:44 pm
jajajaja no veis visiones xdd. Lo puse sin querer en un marco xd

Bueno, alguna solucion??


Título: Re: ayuda fread
Publicado por: Horricreu en 29 Julio 2010, 20:47 pm
veo visiones? me salia el codigo en una marquesina de lado a lado  :o

A mí no me sale ninguna marquesina :-\

Sobre el código:

  • Declaras main() que no es standard. Pásate por acá (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).
  • Es lógico que no vaya la segunda opción. Yo por ejemplo, no tengo creado este fichero, por lo tanto caigo en un bucle infinito. Haz una opción para cuando no tengas el fichero, vuelva a main().

Saludos :P

Advertencia - mientras estabas escribiendo, una nueva respuesta fue publicada. Probablemente desees revisar tu mensaje.


Título: Re: ayuda fread
Publicado por: Gr1nD3r en 29 Julio 2010, 20:55 pm
Ya esta solucionado. Los datos se guardaban en el fichero pero no el numero de fichas
xd.
Al usar fopen("gente.dat","wb"); si no tienes el fichero se crea automaticamente

saludos


Título: Re: ayuda fread
Publicado por: Horricreu en 29 Julio 2010, 20:56 pm
Ya esta solucionado. Los datos se guardaban en el fichero pero no el numero de fichas
xd

Igualmente mírate mi respuesta, que tienes errores graves ;)

Saludos :P


Título: Re: ayuda fread
Publicado por: Gr1nD3r en 29 Julio 2010, 20:57 pm
K error grave?


Título: Re: ayuda fread
Publicado por: Horricreu en 29 Julio 2010, 21:14 pm
K error grave?

Te vuelvo a repetir que mires mi primera respuesta.

Saludos :P


Título: Re: ayuda fread
Publicado por: Gr1nD3r en 29 Julio 2010, 21:19 pm
Como seria la declaracion standar de main??


Título: Re: ayuda fread
Publicado por: Horricreu en 29 Julio 2010, 21:20 pm
Como seria la declaracion standar de main??

Código
  1. //...
  2.  
  3. int main()
  4. {
  5. //...
  6.  
  7. return 0; //No siempre es 0
  8. }

Saludos :P