El primer programa es para introducir los datos de los clientes el fichero se llama "ejer_fichero_6_datos.c
Código C:
Ver original
#include <stdio.h> struct cliente{ char apell[100]; char nom[50]; long int dni; char dir[100]; float saldo; }; int main(int argc, char *argv[]){ FILE *pf; struct cliente c1; char op; else{ /* Si el fichero se abre correctamente */ do{ while((op==' ') || (op=='\n') || (op=='\t')) }while((op=='s') || (op=='S')); } } /* main() */
El segundo programa que llamo "ejer_fichero_6.c" ordena el primer fichero de clientes y hace lo mismo con el segundo.
Código C:
Ver original
/* Programa del ejercicio 6 del boletin� de ficheros. El programa toma tres cadenas de la linea de comandos que corresponden a los nombres de dos ficheros con la informacion de los clientes del banco y el tercero sera el fichero ordenado con los clientes de los dos bancos */ #include <stdlib.h> #include <stdio.h> struct cliente{ char apell[100]; char nom[50]; long int dni; char dir[100]; float saldo; }; int main(int argc, char *argv[]){ void ordena_fich_clientes(); void mezcla_fich_ordenados(); void muestra_fich_clientes(); ordena_fich_clientes(argv[1]); /* Ordena el primer fichero */ ordena_fich_clientes(argv[2]); /* Ordena el segundo fichero */ mezcla_fich_ordenados(argv[1],argv[2],argv[3]); muestra_fich_clientes(argv[1]); muestra_fich_clientes(argv[2]); muestra_fich_clientes(argv[3]); } /* main */ void ordena_fich_clientes(const char *nom_fich){ /* Ordena el fichero segun el campoo dni */ /* Ordena accediendo de forma directa al fichero */ FILE *pf; struct cliente c1, c2; /* Variable que lee del fichero y mira si estan en orden */ int fin=0; /* Indica el final del proceso de ordenacion */ long int pos; /* Posicion del puntero en el fichero para guardar la posicion en el fichero del priemero de los dos elementos que estoy comparando */ else{ /* Si el fichero se abre correctamente */ do{ /* Bucle de ordenacion */ if(c1.dni > c2.dni){ /* Los intercambia */ /* Regresa hacia atras dos registros para escribir c1 y c2 ordenadamente */ /* El elemento siguiente para seguir comparando */ fin=1; /* Al modificar el fichero, realizamos otra pasada al fichero */ } else{ c1=c2; } dos ultimos registros del fichero */ if(c1.dni > c2.dni){ /* Los intercambia */ /* Regresa hacia atras dos registros para escribir c1 y c2 ordenadamente */ fin=0; /* Para ver si en esta nueva iteracion hay cambios */ } } /* Si en esta iteracion de la ordenacion se ha realizado algun cambio de elementos ponemos el puntero del fichero al principio para seguir ordenando */ fin=0; /* Para ver si en esta nueva iteracion hay cambios */ } } } /* ordena_fich_clientes() */ void muestra_fich_clientes(const char* nom_fich){ FILE *pf; struct cliente c1; else{ /* Si el fichero se abre correctamente */ } } } /* muestra_fich_clientes() */ void mezcla_fich_ordenados(const char *n1, const char *n2, const char *n3){ FILE *pf1, *pf2, *pf3; struct cliente c1, c2; /* Lee de cada fichero */ else /* Si el fichero se abre correctamente */ else /* Si el fichero se abre correctamente */ else{ /* Si el fichero se crea correctamente */ if(c1.dni < c2.dni){ } else{ } } } } } /* else de crea pf3 */ fcloseall(); } /* mezcla_fich_ordenados() */
Cuando compilo el primer programa con gcc me sale: Error al abrir el fichero de clientes
Fallo de segmentación
Cuando compilo el siguiente programa hago gcc ejer_fichero_6.c -o ejer_fichero_6
y a continuación pongo ./a.out y me sale: Error al abrir el fichero de clientes
Fallo de segmentación
Cómo puedo compilar el primer programa y el segundo correctamente?. Gracias.