Ver Mensaje Individual
  #1 (permalink)  
Antiguo 08/12/2007, 06:15
narkone
 
Fecha de Ingreso: enero-2005
Ubicación: Sitges
Mensajes: 65
Antigüedad: 20 años
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);
}