• Domingo 15 de Diciembre de 2024, 09:41

Autor Tema:  Re: error al escribir en un archivo  (Leído 1138 veces)

seti

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: error al escribir en un archivo
« en: Sábado 24 de Mayo de 2003, 20:45 »
0
haber si alguien me puede ayudar
en la siguiente funcion el compilador me detecta un falloen la linea de fread

[C++ Error] Project1.cpp(115): E2285 Could not find a match for 'fread(usuarios,unsigned int,int,FILE *)'.

función:
int login(usuarios *usuario,FILE *key)
{
 int
valido=0;
usuarios usutemp;
printf("nLogin: ");
gets(usuario->login);
printf("nPassword: ");
scanf("%ld",&usuario->password);
fread(usutemp,sizeof(usuario),1,key);
if(temp.login==(*usuario).login && temp.login==(*usuario).login)
{
valido=1;
}
return(valido);
}


gracias

Adjunto todo el odigo por si teneis alguna duda:
#include <stdio.h>
#include <conio.h>

typedef struct{
char login[10];
long int password;
int tipo;
}usuarios;
typedef struct{
int codigo;
char nombre[10];
long int telefono;
char propietario[8];
int borrado;
} registro;


int login(usuarios *,FILE *);
void abrir(char[8],FILE **);
void menu(void);
void ruta (char *);
void agregar(void);
void borrar(void);
void modificar(void);
void visualizar(void);
void reorganizar(void);
void recuperar(void);


main()
{
int aceptado,op=0,i;
char cruta[12];
FILE *archivo,*key;
usuarios usu, *usuario;

abrir("c:/system.tpp",&key);

usuario=&usu;
aceptado=login(usuario,key);
ruta(cruta);
abrir(cruta,&archivo);

for(i=1;i>0;i++)
{
menu();
scanf("%d",&op);
    switch(op)
        {
        case 1:agregar(); break;
        case 2:borrar(); break;
        case 3:visualizar(); break;
        case 4:modificar(); break;
        case 5:reorganizar(); break;
        case 6:recuperar(); break;
        case 7:return(0);
        }
}
printf("nnsaliendo");
getch();
fclose(archivo);
fclose(key);
}

void menu(void)
{
        textbackground(7);
        clrscr();
        textcolor(1);
        gotoxy(30,2);
        cprintf("Introduce");
        gotoxy(25,6);
        cprintf("1.Alta");
        gotoxy(25,8);
        cprintf("2.Borrar");
        gotoxy(25,10);
        cprintf("3.Visualizar");
        gotoxy(25,12);
        cprintf("4.Modificar");
        gotoxy(25,14);
        cprintf("5.Reorganizar");
        gotoxy(25,16);
        cprintf("6.Recuperar");
        gotoxy(25,18);
        cprintf("7.Salir");

        }
void abrir(char *nombre, FILE **fichero)
{
        *fichero=fopen(nombre,"rb+");
        if(!*fichero)
          {
           *fichero=fopen(nombre,"wb+");
          if(!*fichero)
          {
          printf("se fallo al abrir el archivo");
          }
          }
}






int login(usuarios *usuario,FILE *key)
{
 int
valido=0;
usuarios usutemp;
printf("nLogin: ");
gets(usuario->login);
printf("nPassword: ");
scanf("%ld",&usuario->password);
fread(usutemp,sizeof(usuario),1,key);
if(temp.login==(*usuario).login && temp.login==(*usuario).login)
{
valido=1;
}
return(valido);
}

void ruta(char *cruta)
{
clrscr();
fflush(stdin);
printf("Introduce la ruta del fichero que quiera abrirn");
gets(cruta);
}

void agregar(void)
{
textbackground(0);
clrscr();
registro registro1;
fflush(stdin);
printf("Introducir un registronnNombre: ");
gets("registro1.nombre");
printf("Telefono: ");
scanf("%ld",®istro1.telefono);

}

void visualizar(void)
{
textbackground(0);
clrscr();
int op;
printf("1.Visualizar ordeanado por:nn");
printf("2.Nombren");
printf("3.Numeros de telefonon");
printf("4.Orden de entrada en la base de datos primero el ultimon");
printf("5.Orden de entrada en la base de datos primero el mas viejon");
printf("6.Volver al menu principaln");
scanf("%d",&op);

}

void borrar(void)
{
textbackground(0);
clrscr();
printf("Introduxaca el nombre del registro que desea borrarn");

printf("Seguro que quiere borrar este registron");
getch();
}

void reorganizar(void)
{
textbackground(0);
clrscr();
printf("Se va a proceder al borrado fisico de los ficheros logicamente borradosn");


printf("Fichero reorganizado pulse cualquier tecla para volver al menu principaln");
getch();
}

void recuperar(void)
{
textbackground(0);
clrscr();
printf("Introduce el codigo del registro que deseas recuperarn");

printf("Escribe 0 para volver al menu");
}
void modificar(void)
{
clrscr();
textbackground(0);
printf("Introduce el codigo del registro que deseas recuperarn");
getch();
}

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: error al escribir en un archivo
« Respuesta #1 en: Domingo 25 de Mayo de 2003, 08:33 »
0
por el momento encontre estos errores en tu funcion...
trata de corregirlos:

 
Código: Text
  1.  
  2. int login(usuarios *usuario,FILE *key)
  3. {
  4.    int valido=0;
  5.  
  6.    usuarios usutemp;
  7.    printf("nLogin: ");
  8.    gets(usuario->login);
  9.    printf("nPassword: ");
  10.    scanf("%ld",&usuario->password);
  11.    //no puedes copiar esto, fread recive un apuntador de cualquier tipo
  12.    //y tu no le estas pasando ningun apuntador, sino la estructura completa
  13.    fread(usutemp,sizeof(usuario),1,key);
  14.  
  15.    //no has declarado la variable temp
  16.    //adicionalmente esta comparacion no hace nada
  17.    //por lo mismo que no has declarado temp
  18.    if(temp.login==(*usuario).login && temp.login==(*usuario).login)
  19.    {
  20.         valido=1;
  21.    }
  22.    //el parentesis sobra, aunque no pasa nada.
  23.    return(valido);
  24. }
  25.  
  26.  

chau.

Juank
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

seti

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: error al escribir en un archivo
« Respuesta #2 en: Domingo 25 de Mayo de 2003, 17:18 »
0
gracias juank ahora ya me funciona era lo del puntero a la estructura en vez de la estructura

coyotero

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
error al escribir en un archivo
« Respuesta #3 en: Domingo 25 de Mayo de 2003, 17:18 »
0
Pues yo, por lo que he visto te da error en... "fread(usutemp,sizeof(usuario),1,key);" porque te falta poner un & en usutemp ya que tienes que leer los usuarios en la direccion de tu variable temporal no?

Saludos!!!