Hay que realizar una cantidad importante de cambios al programa. Comentarios:
* No es necesario incluir los encabezados <windows.h> y "fcntl.h" en el programa, eliminalos.
* Se debe evitar el uso de fflush(stdin) y las funciones como getch parte de la biblioteca conio de Borland. Mas información en la pagina
|Lo que no hay que hacer en C/C++. Nivel basico|.
* Evita macros como esta:
#define PRS(x) printf ("%s\n",x)
Ya que no facilitan la lectura del código fuente, en su lugar utiliza printf directamente.
* Salvo "nouTreballador" en todas las funciones falta el valor de retorno y ya que este no se utiliza deberías cambiar los prototipos indicando que el tipo de retorno es void.
* También debes indicar que las funciones (salvo una) no reciben argumentos mediante la palabra reservada void entre paréntesis:
int nouTreballador(void);
int GravarDades(int num_regs);
int mostrarTreballadors(void);
int modificarDades(void);
int ficheroLog(void);
No debes utilizar "()" ya que ello indica un numero no determinado de argumentos
* En la función main al pedir la opción:
printf("Escoge una opcion: ",opc
);
En la llamada a printf el segundo argumento "opc" y la coma antes de este están de mas, eliminalos.
* En la misma función las variables "continua", "i" y "dadesVector" no se utilizan, eliminalas.
* En la definición de la función "GravarDades" falta indicar el tipo del parámetro.
* El error que mencionas se genera (supongo ya que no puedo ejecutar tu programa) en la función "mostrarTreballadors", en ella tienes un error lógico (la falta de llaves para indicar el cuerpo del bucle):
int mostrarTreballadors(void)
{
treballadors treb;
FILE *fp;
if ((fp
= fopen ("treballador.dat","rb")) == NULL
){ puts("\nNo puc obrir l'arxiu clubs.dat"); }else {
/* bucle */
while (fread (&treb
, mida
, 1, fp
) == 1) printf("______________________________________________________________________________\n\n"); /* bucle */
printf("TRABAJ.\tCLIENTE\t DNI \tANYO\tCATEGORIA\tSUELDO\n"); printf("______________________________________________________________________________\n"); printf("\n%s \t%s \t %i \t%i \t%s \t%i ", treb.
nomTreballador, treb.
cognomClient, treb.
dni, treb.
any, reb.
categoria, treb.
sou);
printf("\n_____________________________________________________________________________\n"); printf("\n\n\nEstos son todos los trabajadores leidos del fichero treballador.dat"); }
}
* La variable "mida" la declaras en dos ocasiones una de forma "global" al inicio del programa y otra vez
con el mismo valor en la función "modificarDades", hay que eliminar esta ultima.
* En la misma función no es necesario utilizar strlen para conocer si la cadena almacenada es una cadena vacía, en su lugar basta con verificar si el primer elemento de la cadena es '\0'.
* Algunos mas ...
Un saludo