Código C:
Ver original#include <stdio.h>
#include <string.h>
#define LEE_CAD(c,n) { int i=0; \
c[i]=getchar();\
while((c[i]=='\n') || (c[i]=='\t')) c[i]=getchar();\
while ((c[i]!='\n') && (i < (n-1))){ \
i++;\
c[i]=getchar(); }\
c[i]='\0'; }
#define LON_CAD 100
typedef struct{
char ape1[LON_CAD];
char ape2[LON_CAD];
char nom[LON_CAD];
char nss[LON_CAD];
char prueba[LON_CAD];
float precio;
}prueba_paciente;
int main(){
char op;
void alta_prueba_paciente();
int prueba_duplicada();
float facturar_paciente();
int prueba_realizada();
void eliminar_dupli_prueba_paciente();
void mostrar_prueba_paciente();
do{
printf("Alta prueba paciente--> a\n"); printf("Eliminar duplicados--> e\n"); printf("Mostrar fichero--> m\n"); printf("Facturar paciente--> f\n"); printf("Comprobar si hay duplicados--> d\n"); printf("Comprobar si una prueba se ha realizado a un paciente--> c\n"); while((op==' ')||(op=='\n')||(op=='\t'))
switch(op){
case 'a':
case 'A':{alta_prueba_paciente(); break;}
case 'e':
case 'E':{eliminar_dupli_prueba_paciente(); break;}
case 'm':
case 'M':{mostrar_prueba_paciente(); break;}
case 'f':
case 'F':{printf("\n%s %.2f\n\n","Su factura asciende a:",facturar_paciente
()); break;} case 'd':
case 'D':{if(pruebe_duplicada()==0)
printf("\nNO hay duplicados\n\n"); else{
printf("\nSi hay duplicados\n\n"); break;}
case 'c':
case 'C':{if(prueba_realizada()==0)
printf("\nPruena NO realizada\n\n"); else{
printf("\nPrueba SI realizada\n\n"); break;}
}
}while((op!='s')&&(op!='S'));
}
void alta_prueba_paciente(){
FILE *pf;
prueba_paciente p;
char op, c;
if((pf
=fopen("prueba_paciente","ab"))==NULL
){ printf("Error al abrir el fichero prueba_paciente.\n"); }
else{
do{
printf("Introduzca el Primer apellido: "); LEE_CAD(p.ape1,LON_CAD);
printf("Introduzca el Segundo apellido: "); LEE_CAD(p.ape2,LON_CAD);
printf("Introduzca el Nombre: "); LEE_CAD(p.nom,LON_CAD);
printf("Introduzca el num. de la SS: "); LEE_CAD(p.nss,LON_CAD);
printf("Introduzca la prueba: "); LEE_CAD(p.prueba,LON_CAD);
printf("Introduzca el precio de la prueba: ");
printf("Otro paciente(s/n)?"); while((op==' ')||(op=='\n')||(op=='\t'))
}while((op!='n')&&(op!='N'));
printf("Error al cerrar el fichero.\n"); }
}
float facturar_paciente(){
FILE *pf;
prueba_paciente p;
char nss[LON_CAD];
float total_factura=0.0;
printf("NSS del paciente a facturar:"); LEE_CAD(nss,LON_CAD);
if((pf
=fopen("prueba_paciente","rb"))==NULL
){ printf("Error al abrir el fichero prueba_paciente.\n"); }
else{
fread(&p
,sizeof(p
),1,pf
); total_factura+=p.precio;
fread(&p
,sizeof(p
),1,pf
); }
printf("Error al abrir el fichero.\n"); }
return(total_factura);
}
int prueba_duplicada(){
FILE *pf;
prueba_paciente p, paux;
long int pos, pos1;
int encontrado=0;
if((pf
=fopen("prueba_paciente","rb"))==NULL
){ printf("Error al abrir el fichero prueba_paciente.\n"); }
else{
fread(&p
,sizeof(p
),1,pf
); while(!feof(pf
) && !encontrado
){ pos1=0;
encontrado=0;
while((pos1 < pos) && !encontrado){
fread(&paux
,sizeof(paux
),1,pf
); if(strcmp(p.
prueba,paux.
prueba)==0){ encontrado=1;
}
}
fseek(pf
,pos
+sizeof(p
),SEEK_SET
); fread(&p
,sizeof(p
),1,pf
); }
}
return(encontrado);
}
int prueba_realizada(){
FILE *pf;
prueba_paciente p;
char nss[LON_CAD];
char prueba[LON_CAD];
int realizada=0;
LEE_CAD(nss,LON_CAD);
printf("Introduzca la prueba a comprobar y esta hecha: "); LEE_CAD(prueba,LON_CAD);
if((pf
=fopen("prueba_paciente","rb"))==NULL
){ printf("Error al abrir el fichero prueba_paciente.\n"); }
else{
fread(&p
,sizeof(p
),1,pf
); while(!feof(pf
) && !realizada
){ if(strcmp(prueba
,p.
prueba)==0) realizada=1;
fread(&p
,sizeof(p
),1,pf
); }
printf("Error al cerrar el fichero.\n"); }
return(realizada);
}
void eliminar_dupli_prueba_paciente(){
FILE *pf;
FILE *pfaux;
prueba_paciente p,paux;
long int pos, pos1;
int encontrado=0;
if((pf
=fopen("prueba_paciente","rb"))==NULL
){ printf("Error al abrir el fichero prueba_paciente.\n"); }
else{
if((pfaux
=fopen("prueba_paciente_aux","wb"))==NULL
){ printf("Error al abrir el fichero prueba_paciente_aux.\n"); }
else{
fread(&p
,sizeof(p
),1,pf
); fread(&p
,sizeof(p
),1,pf
); pos1=0;
encontrado=0;
while((pos1 < pos) && !encontrado){
fread(&paux
,sizeof(paux
),1,pf
); if(strcmp(p.
prueba,paux.
prueba)==0){ encontrado=1;
}
}
if(!encontrado)
fseek(pf
,pos
+sizeof(p
),SEEK_SET
); fread(&p
,sizeof(p
),1,pf
); }
}
}
rename("prueba_paciente","prueba_paciente_con_dup"); rename("prueba_paciente_aux","prueba_paciente"); }
void mostrar_prueba_paciente(){
FILE *pf;
prueba_paciente p;
if((pf
=fopen("prueba_paciente","rb"))==NULL
){ printf("Error al abrir el fichero prueba_paciente.\n"); }
else{
fread(&p
,sizeof(p
),1,pf
); fread(&p
,sizeof(p
),1,pf
); }
printf("Error al cerrar el fichero.\n"); }
}
Al compilarlo me da el siguiente error: En la función ‘main’:
ficheros_ejer2.c:252: error: expected declaration or statement at end of input
ficheros_ejer2.c:252: error: expected declaration or statement at end of input