|
Mostrar Mensajes
|
Páginas: [1] 2
|
1
|
Programación / Programación C/C++ / Duda con fread
|
en: 9 Agosto 2010, 21:30 pm
|
Buenas. Antes que nada, el codigo: #include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ struct{ char nombre[50]; char direccion[100]; char movil[10]; char email[100]; short int nDia; short int nMes; short int nAno; }persona; int i; int opcion=1; //Opcion elegida por le usuario char textoTemporal[40]; FILE *fichero; while(opcion != 0){ printf("1.- A%cadir ficha nueva\n\n",164); printf("2.- Visualizar nombres de fichas existentes\n\n"); printf("3.- Buscar por nombre\n\n"); sscanf(textoTemporal ,"%d",&opcion ); switch(opcion){ case 1: fichero =fopen("gente.dat","ab"); printf("Dia de nacimiento: "); sscanf(textoTemporal ,"%d",&persona. nDia); printf("Mes de nacimiento: "); sscanf(textoTemporal ,"%d",&persona. nMes); printf("Año de nacimiento: "); sscanf(textoTemporal ,"%d",&persona. nAno); fwrite(&persona ,1,sizeof(persona ),fichero ); break; case 2: fichero =fopen("gente.dat","rb"); while(feof(fichero ) == 0){ fread(&persona ,1,sizeof(persona ),fichero ); } break; case 3: printf("Introduzca el nombre de la persona: "); fichero =fopen("gente.dat","rb"); fread(persona. nombre,1,sizeof(persona. nombre),fichero ); fread(persona. direccion,1,sizeof(persona. direccion),fichero ); fread(persona. movil,1,sizeof(persona. movil),fichero ); fread(persona. email,1,sizeof(persona. email),fichero ); fread(&persona. nDia,sizeof(persona. nDia),1,fichero ); fread(&persona. nMes,sizeof(persona. nMes),1,fichero ); fread(&persona. nAno,sizeof(persona. nAno),1,fichero ); if((strcmp(persona. nombre,textoTemporal )== 0)){ printf("Dia de nacimiento: %d\n",persona. nDia); printf("Mes de nacimiento: %d\n",persona. nMes); printf("A%co de nacimiento: %d\n",164,persona. nAno); } }3 } return 0; }
El problema es el siguiente: Cuando escojo la opcion 2, se deben mostrar todos los nombres de las fichas guardadas. Pero el ultimo nombre siempre se repite y se imprime en pantalla dos veces. Alguien sane a que se debe???? pd: La opcion 3 no esta mal, aun no la he modificado GRACIAS!!
|
|
|
4
|
Programación / Programación C/C++ / Re: ayuda fread
|
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
|
|
|
6
|
Programación / Programación C/C++ / ayuda fread
|
en: 29 Julio 2010, 20:38 pm
|
#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
|
|
|
8
|
Programación / Programación C/C++ / Ejercicio C manejo de ficheros
|
en: 25 Julio 2010, 15:32 pm
|
A ver si me podeis echar una mano con el siguiente ejercicio:
Crear un “struct” que almacene los siguientes datos de una persona: nombre, edad, ciudad de residencia. Pedir al usuario esos datos de una persona y guardarlos en un fichero llamado “gente.dat”. Cerrar el fichero, volverlo a abrir para lectura y mostrar los datos que se habían guardado.
El problema viene cuando abro el fichero en modo lectura e intento leer la variable edad. No se muy bien como usar fscanf para guardar la variable edad. A ve si m podeis ayudar
Gracias
|
|
|
|
|
|
|