Como obviar archivo leido si no existe en C linux

Iniciado por RicGeo, 16 Junio 2014, 23:05 PM

0 Miembros y 1 Visitante están viendo este tema.

RicGeo

Hola amigos del ElHacker quisiera que me ayuden con un problema que tengo a la hora de compilar este pequeño programa en C.
Este pequeño programa guarda los numeros que se encuentran dentro de ciertos archivos, hasta ahi todo bien.. el problema empieza cuando quiero condicionar el programa para cuando no exita el archivo del cual quiero tomar sus numeros ... mando a compliar pero en el terminal aparece "Abortado (`core' generado)" y otros codigos sin sentido alguno.
Que me faltaría agregar para que el programa siga ejecutandose cuando no encuentre un archivo?
#include<stdio.h>
int main(){
int i,j,k;
double coord1[31][3],coord2[31][3],coord3[31][3];
   FILE *erp1,*erp2,*erp3;
///////////////////////////////////////////////////
        erp1=fopen("/home/PROGAMACION/prueba_gg/am01","r");
         if (!erp1)
           //Que puedo poner aca?//
         else{
            erp1=fopen("/home/PROGAMACION/prueba_gg/am01","r");   
            for (i=0,j=0,k=0;i<7,j<7,k<7;i++,j++,k++){
                fscanf(erp1,"%lf\n",&coord1[i][0]);
                fscanf(erp1,"%lf\n",&coord1[j][1]);
                fscanf(erp1,"%lf\n",&coord1[k][2]);
                printf("%lf - %lf - %lf\n",coord1[i][0],coord1[j][1],coord1[k][2]);
                }
             }
        fclose(erp1);
//////////////////////////////////////////////////
       printf("###########################\n");
        erp2=fopen("/home/PROGAMACION/prueba_gg/am02","r");
         if (!erp2)
           //Que puedo poner aca?//
         else{   
            erp2=fopen("/home/PROGAMACION/prueba_gg/am02","r");
            for (i=0,j=0,k=0;i<7,j<7,k<7;i++,j++,k++){
                fscanf(erp2,"%lf\n",&coord2[i][0]);
                fscanf(erp2,"%lf\n",&coord2[j][1]);
                fscanf(erp2,"%lf\n",&coord2[k][2]);
                printf("%lf - %lf - %lf\n",coord2[i][0],coord2[j][1],coord2[k][2]);
                }
             }
        fclose(erp2);
//////////////////////////////////////////////////
       printf("###########################\n");
        erp3=fopen("/home/PROGAMACION/prueba_gg/an02","r");
         if (!erp3)
           //Que puedo poner aca?//
         else{   
            erp3=fopen("/home/PROGAMACION/prueba_gg/an2","r");
            for (i=0,j=0,k=0;i<7,j<7,k<7;i++,j++,k++){
                fscanf(erp3,"%lf\n",&coord3[i][0]);
                fscanf(erp3,"%lf\n",&coord3[j][1]);
                fscanf(erp3,"%lf\n",&coord3[k][2]);
                printf("%lf - %lf - %lf\n",coord3[i][0],coord3[j][1],coord3[k][2]);
                }
             }
        fclose(erp2);
return 0;
}

Agradezco su atencion!!

xiruko

Qué debe hacer el programa cuando no encuentra algún archivo?

Así sin saberlo, yo solamente mandaría un mensaje de error por el stderr:

fprintf(stderr, "ERROR: No se encontro el archivo %s\n", archivo);

Por cierto, el fclose() deberías ponerlo dentro de cada else en lugar de fuera, ya que sino, en el caso de que no encuentre el archivo, el puntero que le pasas no es un puntero válido y puede generar problemas tal y como te está pasando a ti.

Saludos.