C/Visual C - Respondan a esto

 
Vista:

Respondan a esto

Publicado por Pedro (3 intervenciones) el 25/06/2005 18:57:51
Hola a todos, tengo el siguiente problema y me gustaria que me ayudaran.
Lo que pasa es que quiero leer desde un archivo binario, esto es para una agenda y para leer tengo que utilizar la funcion fread, esto por que asi me lo pidieron, pero lo que pasa es que no puedo leer, simplemente no me aparece nada, yo utilizo turbo c++. De antemano gracias al que me ayude. El codigo de mi agenda es el siguiente:

Código:
#include <stdio.h>
#include <dos.h>
#include <alloc.h>
#include <string.h>
#include <conio.h>
typedef struct datos
{
char nombre[100];
char domicilio[100];
char email[40];
char telefono[15];
char nacimiento[25];
};
FILE *entrada;
int num, i, j;
datos *personas, x;
char ingresa();
char busca();
char modif();
char lista();
char orden();
void main()
{

entrada = fopen("c:\\agendab.bin", "a+b");
short op;
a:
clrscr();
gotoxy(38, 2); printf("AGENDA\n\n");
printf("Elija una opcion >\n1)A¤adir\n2)Buscar\n3)Modificar\n4)Ver lista completa\n5)Salir\n\t\t\t");
scanf("%i", &op); flushall();
switch(op)
{
case 1: ingresa(); goto a;
case 2: busca(); goto a;
case 3: modif(); goto a;
case 4: lista(); goto a;
case 5: break;
default:
{
printf("\n\t\t\tOpcion incorrecta\n");
sound(4500); delay(100);
sound(3500); delay(100);
sound(4500); delay(100);
sound(3500); delay(100);
nosound();
getch();
}goto a;
}
fclose(entrada);
}
char ingresa()
{
clrscr();
printf("\n¨Cuantos registros de personas deseas ingresar? ");
scanf("%i", &num); flushall();
personas = (datos *)malloc(num * sizeof(datos));
fseek(entrada, 0, SEEK_END);
for(i = 0; i < num; i++)
{
printf("\n\t\t Dame el registro No. %i\n\n", i + 1);
printf("Introduce el nombre de la persona > ");
gets(personas[i].nombre); flushall();
printf("Introduce el domicilio de %s > ", personas[i].nombre);
gets(personas[i].domicilio); flushall();
printf("Introduce el telefono %s > ", personas[i].nombre);
gets(personas[i].telefono); flushall();
printf("Introduce el email de %s > ", personas[i].nombre);
gets(personas[i].email); flushall();
printf("Introduce la fecha de nacimiento de %s > ", personas[i].nombre);
gets(personas[i].nacimiento); flushall();
printf("\n");
fwrite(&personas[i], sizeof(datos), 1, entrada); fflush(entrada);
}
clrscr();
return(0);
}
char busca()
{
clrscr();
char *busqueda;
int nbloques;
fseek(entrada, 0, SEEK_END);
nbloques = ftell(entrada)/sizeof(datos);
busqueda = (char *) malloc(50 * sizeof(char));
fseek(entrada, ftell(entrada), SEEK_SET);
fread(personas, nbloques, 1, entrada); fflush(entrada);
printf("%s", personas[1].nombre);
printf("\t\t\t\tBuscar persona\n\n");
printf("Introduce el nombre de la persona a buscar >\n");
gets(busqueda); flushall();
for(i = 0; i < strlen(busqueda); i++)
{
if(strcmp(personas[i].nombre, busqueda) == 0)
printf("%s %s %s %s", personas[i].nombre, personas[i].domicilio, personas[i].telefono, personas[i].email);
}
getch();
return(0);
}
char modif()
{
char *nombre, *nm, *nd, *nt, *ne;
int dato;
nombre = (char *)malloc(35 * sizeof(char));
nm = (char *)malloc(35 * sizeof(char));
nd = (char *)malloc(35 * sizeof(char));
nt = (char *)malloc(35 * sizeof(char));
ne = (char *)malloc(35 * sizeof(char));
clrscr();
printf("\t\t\t\tModificar\n\n");
printf("Nombre de la persona a modificar > \n");
gets(nombre); flushall();
printf("Dato a modificar:\n\n1)nombre\n2)direccion\n3)telefono\n4)email\n");
scanf("%i", &dato); flushall();
switch(dato)
{
case 1:
{
clrscr();
printf("Dame el nuevo nombre >\n");
gets(nm); flushall();
for(i = 0; i < num; i++)
{
if(strcmp(personas[i].nombre, nombre) == 0)
strcpy(personas[i].nombre, nm);
}
printf("\nEl nombre ha sido cambiado\n");
getch();
}break;
case 2:
{
clrscr();
printf("Dame la nueva direccion >\n");
gets(nd); flushall();
for(i = 0; i < num; i++)
{
if(strcmp(personas[i].nombre, nombre) == 0)
strcpy(personas[i].domicilio, nd);
}
printf("\nLa direccion ha sido cambiado\n");
getch();
}break;
case 3:
{
clrscr();
printf("Dame el nuevo telefono >\n");
gets(nt); flushall();
for(i = 0; i < num; i++)
{
if(strcmp(personas[i].nombre, nombre) == 0)
strcpy(personas[i].telefono, nt);
}
printf("\nEl telefono ha sido cambiado\n");
getch();
}break;
case 4:
{
clrscr();
printf("Dame el nuevo email >\n");
gets(ne); flushall();
for(i = 0; i < num; i++)
{
if(strcmp(personas[i].nombre, nombre) == 0)
strcpy(personas[i].email, ne);
}
printf("\nEl email sido cambiado\n");
getch();
}break;
}
getch();
return(0);
}
char orden()
{
for(i = 0; i < num; i++)
{
for(j = i+1; j < num; j++)
{
if(strcmp(personas[i].nombre, personas[j].nombre) > 0)
{
x= personas[i];
personas[i] = personas[j];
personas[j]= x;
}
}
}
return(0);
}
char lista()
{
clrscr();
printf("\t\t\tLista completa\n\n");
orden();
for(i = 0; i < num; i++)
printf("%s\n", personas[i].nombre);
getch();
return(0);
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Respondan a esto

Publicado por EdwinJimenez (2 intervenciones) el 26/06/2005 18:06:44
Oye, sabes como ordenar una cadena de caracteres?????
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar