Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Fallo al leer archivo en C

Estas en el tema de Fallo al leer archivo en C en el foro de C/C++ en Foros del Web. Hola! estoy haciendo un trabajo de la universidad en el cual gestionamos una "base de datos" con las empleadas que tenemos en una empresa. El ...
  #1 (permalink)  
Antiguo 08/12/2007, 06:15
 
Fecha de Ingreso: enero-2005
Ubicación: Sitges
Mensajes: 65
Antigüedad: 19 años, 4 meses
Puntos: 0
Fallo al leer archivo en C

Hola!
estoy haciendo un trabajo de la universidad en el cual gestionamos una "base de datos" con las empleadas que tenemos en una empresa. El programa lee el documento.txt donde está el listado de las empleadas y despues puedes borrar y dar de alta a empleadas.
El problema aparece cuando se ejecuta, indica que no puede abrir el documento.txt. Alguien sabe que puede ser? llevo más de 2h con el debuger y nada...

Muchas gracias!!!

Adjunto código:

Código PHP:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

#define MAXP 80
#define MAXEMP 5

typedef char Tpalabra [MAXP];


//DEFINICION DE ESTRUCTURAS

    
typedef struct
    
{
        
int id;                    //Nº de empleada
        
Tpalabra nombre;        //nombre empleada
    
}Templeada;
    
    
typedef struct{
        
int num_empleadas;                //nº de empleadas
        
Templeada empleada[MAXEMP];        //Empleadas
    
}Tlista_empleadas;

//FIN DEFINICION DE ESTRUCTURAS
/*---------------------------------------------------------------------------------------------------------------*/
/*OPERACIONES DE LECTURA-ESCRITURA DE DATOS DEL FICHERO*/

    
int salva_empleadas (Tpalabra fTlista_empleadas *l)
    {
        
int i=0;
        
FILE*datos;
        
datos fopen (f"w");
   
    if (
datos==NULL)
        {
            return -
1;
        }
    while (
i<l->num_empleadas)
        {
        
fprintf(datos"%d %s \n"l->empleada[i].id->empleada[i].nombre);
        
i++;
        }
  
    
fclose (datos);
    return 
0;
    };
    
/*-----------------------------------------------------------------------------------------------------*/

//PARTE ADRIAN

    
int cargar_empleadas (Tpalabra fTlista_empleadas l)
    {
        
/* Carga en lista l información de las empleadas, qe está en el fichero de texto cuyo nombre está en f.
        Devulve:
        0 si la carga es correcta
        -1 si no encuentra el fichero
        -2 si los datos del fichero no están correctos
        */
    
int i=0;
    
int err;
    
int cod;
    
Tpalabra nom;
    
FILE *datos;
    
datos=fopen (f"r");
    if(
datos==NULL)
        return -
1;
    else
        {
        while(!
feof(datos))
            {
            
err=fscanf(datos"%d %s%*", &codnom);
            if(
err!=2)
                return -
2;
            else
                {
                
l->empleada[i].id =cod;
                
strcpy (l->empleada[i].nombre,nom);
                
i++;
                }
            }
        
l->num_empleadas=i;
        return 
0;
        }
    }
    
/*---------------------------------------------------------------------------------------------------*/

//PARTE HIGINIO

//ALTA, BAJA, EDICION Y LISTA DE DATOS

int alta_empleada (Templeada empTlista_empleadas l)
{
    
/*Anade una empleada al final de la lista de empleada
    Devuelve:
            0 si la ha anadido correctamente
            -1 si no la ha podido aÒadir */
    
if(l->num_empleadas==MAXEMP)
        return (-
1);
    else
    {
    
l->empleada[l->num_empleadas++]=emp;
    return (
0);
    }
};
 
int busca_empleada(int codigoEmpleadaTlista_empleadas l)
{
    
/*Busca una empleada de la lista que tenga el codigo. Duevuelve:
        i ( que es la posicion) si ha encontrado la empleada correctamente
        -1 si no la ha encontrado */
    
int i 0;
    while (
->num_empleadas)
     {
        if (
l->empleada[i].id == codigoEmpleada)
            return 
i;
        else
            
i++;
    }
    return -
1;
};
 
int baja_empleada (int numEmpleadaTlista_empleadas l)
{
   
/* Elimina una empleada de la lista de empleadas
   Deuelve:
                   0 si la ha borrado correctamente
                   -1 si no la ha podido borrar   */
 
int i,j;
 
busca_empleada (numEmpleadal);
 
if (
!= -1)
 {
   
j=i;
   while (
->num_empleadas-1)
   {
        
->empleada[j] = ->empleada[j+1];
        
j++;
    }
    
->num_empleadas --;
    return 
0;
}
else
     return -
1;
};

/*------------------------------------------------------------------------------------------------*/
    
//PARTE VICTOR
//PROGRAMA PRINCIPAL

int main ()
{
    
Tlista_empleadas mis_empleadas;
    
Templeada nueva_empleada;
    
Tpalabra fichero;
    
int erropcodigo_baja;
   
    
/*cargmos el fichero empleadas*/
    
    
strcpy (fichero"empl2.txt");
    
err cargar_empleadas (fichero, &mis_empleadas);
   
    if (
err==-1)
        
printf("No se ha podido encontrar el fichero de empleadas '%s'. \n"fichero);
    else if (
err==-2)
        
printf("Los datos de las empleadas no estaban en el formato correcto '%s'. \n"fichero);
    else 
        {
        
printf("Los datos de las empleadas se han cargado correctamente '%s'. \n"fichero);
        
op=-1;
        while (
op!=0)
        {
            
printf("Escribe la opcion deseada:\n");
            
printf("0: Acabar \n");
            
printf("1: Dar de alta a una empleada \n");
            
printf("2: Dar de baja a una empleada \n");
            
printf("3: Ayuda \n");
            
scanf("%d", &op);
           
            switch (
op)
            {
                case 
0: break; //Salir
               
                
case 1printf("Escribe el código y nombre de la empleada a agregar: \n"); //Alta
                        
scanf("%d %s", &nueva_empleada.idnueva_empleada.nombre);
                        
err alta_empleada(nueva_empleada, &mis_empleadas);
                        if (
err==0)
                            
printf("La empleada '%s' se ha dado de alta. \n"nueva_empleada.nombre);
                        else{
                            
printf("Error al da de alta a la empleada '%s' ya que no hay más sitio. \n"nueva_empleada.nombre);
       }
                        break;
                       
                case 
2printf("Escribe el codigo de la empleada a eliminar: \n"); //Baja
                        
scanf("%d", &codigo_baja);
                        
err baja_empleada (codigo_baja, &mis_empleadas);
                        if (
err==0)
                            
printf("La empleada numero '%d' se ha dado de baja correctamente. \n"codigo_baja);
                        else{
                            
printf("Error al intentar dar de baja a la empleada '%d' ya que no se ha encontrado. \n"codigo_baja);}
                        break;
                       
                case 
3printf("Busca ayuda especializada ya que no entender dichas ordenes es de gente un poco lerda... \n"); //Ayuda
                        
break;
               
                default: 
printf("Codigo de operacion erroneo, necesitas ayuda? \n");
                        break;
            }
            
printf("Gracias por usar el programa. \n");
            
            }
        
//Guardamos el fichero de empleadas
       
        
strcpy (fichero"empl3.txt");
        
err=salva_empleadas(fichero, &mis_empleadas);
        if (
err==0)
            
printf("Los datos de las emleadas se han guardado correctamente en '%s'. \n"fichero);
        else if(
err==-1)
            
printf("Error al abrir para escritura el fichero de empleadas '%s'. \n"fichero);
}

  #2 (permalink)  
Antiguo 08/12/2007, 12:51
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Fallo al leer archivo en C

¿En que punto exactamente tenes el error? Yo creando el archivo vacio ya obtengo el error del formato incorrecto al arrancar ...

Por cierto cuando depuras puede ser que se ejecute en un directorio diferente al que crees que se esta ejecutando y por eso no encuentre el archivo.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #3 (permalink)  
Antiguo 08/12/2007, 12:53
 
Fecha de Ingreso: enero-2005
Ubicación: Sitges
Mensajes: 65
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: Fallo al leer archivo en C

Me da ese "error", pero si no estuviese en esa misma carpeta daría otro mensaje, diría que no está el archivo.txt.
  #4 (permalink)  
Antiguo 08/12/2007, 13:20
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Fallo al leer archivo en C

¿Y que tenes en ese archivo? Le puse 15 Maria y me desplego el menu ... no conozco muy bien el funcionamiento de scanf pero eso ultimo de %* no parece tener mucho sentido de cualquier manera.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #5 (permalink)  
Antiguo 08/12/2007, 13:44
 
Fecha de Ingreso: enero-2005
Ubicación: Sitges
Mensajes: 65
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: Fallo al leer archivo en C

He quitado el %* y puesto %\n para que detecte el salto de linea.
A mi me sigue sin funcionar, no lo entiendo. Me está dando un dolor de cabeza... Ya que si es de código el fallo no compila pero al ser un fallo así, ufff
  #6 (permalink)  
Antiguo 08/12/2007, 14:18
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Fallo al leer archivo en C

¿Y que tenes en ese archivo? Fijate que valor retorna fscanf.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #7 (permalink)  
Antiguo 08/12/2007, 15:35
 
Fecha de Ingreso: enero-2005
Ubicación: Sitges
Mensajes: 65
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: Fallo al leer archivo en C

Cita:
Iniciado por Eternal Idol Ver Mensaje
¿Y que tenes en ese archivo? Fijate que valor retorna fscanf.
Retorna -2,
tengo escrito:
Código:
001 maria
023 laura
324 sofia
  #8 (permalink)  
Antiguo 08/12/2007, 18:39
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Re: Fallo al leer archivo en C

Con esos datos tambien me funciona correctamente (bah, me muestra el menu). ¿Que compilador usas? ¿Estas seguro que fscanf retorna -2? Me refiero al valor que toma err justo despues de llamar a fscanf no al valor de retorno de cargar_empleadas.
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
  #9 (permalink)  
Antiguo 08/12/2007, 20:04
 
Fecha de Ingreso: enero-2005
Ubicación: Sitges
Mensajes: 65
Antigüedad: 19 años, 4 meses
Puntos: 0
Re: Fallo al leer archivo en C

Uso GCC, estoy en MacOSX programando desde XCode.
err me retorna -2, cómo miro que me da antes de ver empleadas?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 22:51.