Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Gr1nD3r

#1
Programación C/C++ / Duda con fread
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");
printf("Teclee su opcion: ");
gets(textoTemporal);
sscanf(textoTemporal,"%d",&opcion);

switch(opcion){
case 1:
fichero=fopen("gente.dat","ab");
printf("Nombre: ");
gets(persona.nombre);
printf("Direccion: ");
gets(persona.direccion);
printf("Telefono movil: ");
gets(persona.movil);
printf("Email: ");
gets(persona.email);
printf("Dia de nacimiento: ");
gets(textoTemporal);
sscanf(textoTemporal,"%d",&persona.nDia);
printf("Mes de nacimiento: ");
gets(textoTemporal);
sscanf(textoTemporal,"%d",&persona.nMes);
printf("Año de nacimiento: ");
gets(textoTemporal);
sscanf(textoTemporal,"%d",&persona.nAno);
fwrite(&persona,1,sizeof(persona),fichero);
fclose(fichero);
system("cls");
break;
case 2:
fichero=fopen("gente.dat","rb");
while(feof(fichero) == 0){
fread(&persona,1,sizeof(persona),fichero);
puts(persona.nombre);
}
fclose(fichero);
break;

case 3:
printf("Introduzca el nombre de la persona: ");
gets(textoTemporal);
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("Nombre: ");
puts(persona.nombre);
printf("Direccion: ");
puts(persona.direccion);
printf("Movil: ");
puts(persona.movil);
printf("email: \n");
puts(persona.email);
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);
}
fclose(fichero);
}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!!
#2
Programación C/C++ / Re: ayuda fread
29 Julio 2010, 21:19 PM
Como seria la declaracion standar de main??
#3
Programación C/C++ / Re: ayuda fread
29 Julio 2010, 20:57 PM
K error grave?
#4
Programación C/C++ / Re: ayuda fread
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
#5
Programación C/C++ / Re: ayuda fread
29 Julio 2010, 20:44 PM
jajajaja no veis visiones xdd. Lo puse sin querer en un marco xd

Bueno, alguna solucion??
#6
Programación C/C++ / ayuda fread
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
#7
y como seria la solucion en modo binario?
#8
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
#9
Programación C/C++ / Re: Manejo de ficheros
18 Julio 2010, 02:32 AM
K va. No me muestra ningun Warning
#10
Programación C/C++ / Re: Manejo de ficheros
18 Julio 2010, 02:18 AM
Ok. Yo siempre he utilizado Dev-C++ con Mingw