Foros del Web » Programación para mayores de 30 ;) » C/C++ »

ejercicio que me da error

Estas en el tema de ejercicio que me da error en el foro de C/C++ en Foros del Web. @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C: Ver original #include <stdio.h> #include <string.h> #define LEE_CAD(c,n) { int i=0; \                   ...
  #1 (permalink)  
Antiguo 16/04/2010, 05:07
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 2 meses
Puntos: 0
ejercicio que me da error

Código C:
Ver original
  1. #include <stdio.h>
  2. #include <string.h>
  3. #define LEE_CAD(c,n) { int i=0; \
  4.                      c[i]=getchar();\
  5.              while((c[i]=='\n') || (c[i]=='\t')) c[i]=getchar();\
  6.              while ((c[i]!='\n') && (i < (n-1))){ \
  7.                 i++;\
  8.             c[i]=getchar(); }\
  9.              c[i]='\0'; }
  10.  
  11. #define LON_CAD 100
  12.  
  13. typedef struct{
  14.            char ape1[LON_CAD];
  15.            char ape2[LON_CAD];
  16.            char nom[LON_CAD];
  17.            char nss[LON_CAD];
  18.            char prueba[LON_CAD];
  19.            float precio;
  20. }prueba_paciente;
  21.  
  22. int main(){
  23.      char op;
  24.      void alta_prueba_paciente();
  25.      int prueba_duplicada();
  26.      float facturar_paciente();
  27.      int prueba_realizada();
  28.      void eliminar_dupli_prueba_paciente();
  29.      void mostrar_prueba_paciente();
  30.  
  31.      do{
  32.         printf("Alta prueba paciente--> a\n");      
  33.         printf("Eliminar duplicados--> e\n");
  34.         printf("Mostrar fichero--> m\n");          
  35.         printf("Facturar paciente--> f\n");          
  36.         printf("Comprobar si hay duplicados--> d\n");            
  37.         printf("Comprobar si una prueba se ha realizado a un paciente--> c\n");
  38.         printf("Salir--> s\n");
  39.         printf("Opcion: ");
  40.         op=getchar();
  41.         while((op==' ')||(op=='\n')||(op=='\t'))
  42.           op=getchar();
  43.         switch(op){
  44.              case 'a':
  45.              case 'A':{alta_prueba_paciente(); break;}
  46.              case 'e':
  47.              case 'E':{eliminar_dupli_prueba_paciente(); break;}
  48.              case 'm':
  49.              case 'M':{mostrar_prueba_paciente(); break;}
  50.              case 'f':
  51.              case 'F':{printf("\n%s %.2f\n\n","Su factura asciende a:",facturar_paciente()); break;}
  52.              case 'd':
  53.              case 'D':{if(pruebe_duplicada()==0)
  54.                        printf("\nNO hay duplicados\n\n");
  55.                        else{
  56.                             printf("\nSi hay duplicados\n\n");
  57.                        break;}
  58.              case 'c':
  59.              case 'C':{if(prueba_realizada()==0)
  60.                        printf("\nPruena NO realizada\n\n");
  61.                        else{
  62.                             printf("\nPrueba SI realizada\n\n");
  63.                        break;}
  64.         }  
  65.      }while((op!='s')&&(op!='S'));
  66. }
  67.  
  68. void alta_prueba_paciente(){
  69.      FILE *pf;
  70.      prueba_paciente p;
  71.      char op, c;
  72.        
  73.      if((pf=fopen("prueba_paciente","ab"))==NULL){
  74.           printf("Error al abrir el fichero prueba_paciente.\n");
  75.      }
  76.      else{
  77.        do{
  78.           c=getchar();
  79.           printf("Introduzca el Primer apellido: ");
  80.           LEE_CAD(p.ape1,LON_CAD);
  81.           printf("Introduzca el Segundo apellido: ");
  82.           LEE_CAD(p.ape2,LON_CAD);
  83.           printf("Introduzca el Nombre: ");
  84.           LEE_CAD(p.nom,LON_CAD);
  85.           printf("Introduzca el num. de la SS: ");
  86.           LEE_CAD(p.nss,LON_CAD);
  87.           printf("Introduzca la prueba: ");
  88.           LEE_CAD(p.prueba,LON_CAD);
  89.           printf("Introduzca el precio de la prueba: ");
  90.           scanf("%f",&p.precio);
  91.           fwrite(&p,sizeof(p),1,pf);
  92.  
  93.           printf("Otro paciente(s/n)?");
  94.           op=getchar();
  95.           while((op==' ')||(op=='\n')||(op=='\t'))
  96.               op=getchar();
  97.        }while((op!='n')&&(op!='N'));
  98.        if(fclose(pf)==EOF)
  99.           printf("Error al cerrar el fichero.\n");
  100.      }
  101. }
  102.  
  103. float facturar_paciente(){
  104.         FILE *pf;
  105.         prueba_paciente p;
  106.         char nss[LON_CAD];
  107.         float total_factura=0.0;
  108.  
  109.         printf("NSS del paciente a facturar:");
  110.         LEE_CAD(nss,LON_CAD);
  111.         if((pf=fopen("prueba_paciente","rb"))==NULL){
  112.            printf("Error al abrir el fichero prueba_paciente.\n");
  113.         }
  114.         else{
  115.              fread(&p,sizeof(p),1,pf);
  116.              while(!feof(pf)){
  117.                 if(strcmp(nss,p.nss)==0)
  118.                    total_factura+=p.precio;
  119.                 fread(&p,sizeof(p),1,pf);
  120.              }
  121.              if(fclose(pf)==EOF)
  122.                printf("Error al abrir el fichero.\n");
  123.         }
  124.         return(total_factura);
  125. }
  126.  
  127. int prueba_duplicada(){
  128.       FILE *pf;
  129.       prueba_paciente p, paux;
  130.       long int pos, pos1;
  131.       int encontrado=0;
  132.  
  133.       if((pf=fopen("prueba_paciente","rb"))==NULL){
  134.           printf("Error al abrir el fichero prueba_paciente.\n");
  135.       }
  136.       else{
  137.            fread(&p,sizeof(p),1,pf);
  138.            while(!feof(pf) && !encontrado){
  139.               pos=ftell(pf)-sizeof(p);
  140.               fseek(pf,0,SEEK_SET);
  141.               pos1=0;
  142.               encontrado=0;
  143.               while((pos1 < pos) && !encontrado){
  144.                  fread(&paux,sizeof(paux),1,pf);
  145.                      pos1=ftell(pf);
  146.                      if(strcmp(p.nss,paux.nss)==0)
  147.                         if(strcmp(p.prueba,paux.prueba)==0){
  148.                           encontrado=1;
  149.                         }
  150.               }
  151.               fseek(pf,pos+sizeof(p),SEEK_SET);
  152.               fread(&p,sizeof(p),1,pf);
  153.            }
  154.       }
  155.       fclose(pf);
  156.       return(encontrado);
  157. }
  158.  
  159. int prueba_realizada(){
  160.         FILE *pf;
  161.         prueba_paciente p;
  162.         char nss[LON_CAD];
  163.         char prueba[LON_CAD];
  164.         int realizada=0;
  165.         printf("NSS del paciente:");
  166.         LEE_CAD(nss,LON_CAD);
  167.         printf("Introduzca la prueba a comprobar y esta hecha: ");
  168.         LEE_CAD(prueba,LON_CAD);
  169.  
  170.         if((pf=fopen("prueba_paciente","rb"))==NULL){
  171.           printf("Error al abrir el fichero prueba_paciente.\n");
  172.         }
  173.         else{
  174.            fread(&p,sizeof(p),1,pf);
  175.            while(!feof(pf) && !realizada){
  176.              if(strcmp(nss,p.nss)==0)
  177.                if(strcmp(prueba,p.prueba)==0)
  178.                  realizada=1;
  179.              fread(&p,sizeof(p),1,pf);
  180.            }
  181.            if(fclose(pf)==EOF)
  182.              printf("Error al cerrar el fichero.\n");
  183.         }
  184.         return(realizada);
  185. }
  186.  
  187. void eliminar_dupli_prueba_paciente(){
  188.         FILE *pf;
  189.         FILE *pfaux;
  190.         prueba_paciente p,paux;
  191.         long int pos, pos1;
  192.         int encontrado=0;
  193.  
  194.         if((pf=fopen("prueba_paciente","rb"))==NULL){
  195.           printf("Error al abrir el fichero prueba_paciente.\n");
  196.         }
  197.         else{
  198.              if((pfaux=fopen("prueba_paciente_aux","wb"))==NULL){
  199.                 printf("Error al abrir el fichero prueba_paciente_aux.\n");
  200.              }
  201.              else{
  202.                   fread(&p,sizeof(p),1,pf);
  203.                   fwrite(&p,sizeof(p),1,pfaux);
  204.                   fread(&p,sizeof(p),1,pf);
  205.                   while(!feof(pf)){
  206.                       pos=ftell(pf)-sizeof(p);
  207.                       fseek(pf,0,SEEK_SET);
  208.                       pos1=0;
  209.                       encontrado=0;
  210.                        while((pos1 < pos) && !encontrado){
  211.                             fread(&paux,sizeof(paux),1,pf);
  212.                                pos=ftell(pf);
  213.                                if(strcmp(p.nss,paux.nss)==0)
  214.                                  if(strcmp(p.prueba,paux.prueba)==0){
  215.                                    encontrado=1;
  216.                                  }
  217.                        }
  218.                        if(!encontrado)
  219.                          fwrite(&p,sizeof(p),1,pfaux);
  220.                          fseek(pf,pos+sizeof(p),SEEK_SET);
  221.                          fread(&p,sizeof(p),1,pf);
  222.                   }
  223.              }
  224.         }
  225.         fclose(pf);
  226.         fclose(pfaux);
  227.         rename("prueba_paciente","prueba_paciente_con_dup");
  228.         rename("prueba_paciente_aux","prueba_paciente");
  229. }
  230.  
  231. void mostrar_prueba_paciente(){
  232.         FILE *pf;
  233.         prueba_paciente p;
  234.        
  235.         if((pf=fopen("prueba_paciente","rb"))==NULL){
  236.           printf("Error al abrir el fichero prueba_paciente.\n");
  237.         }
  238.         else{
  239.             fread(&p,sizeof(p),1,pf);
  240.             while(!feof(pf)){
  241.                   printf("%s\n",p.ape1);    
  242.                   printf("%s\n",p.ape2);
  243.                   printf("%s\n",p.nom);
  244.                   printf("%s\n",p.nss);
  245.                   printf("%s\n",p.prueba);
  246.                   printf("%.2f\n",p.precio);
  247.                   printf("\n");
  248.                   fread(&p,sizeof(p),1,pf);
  249.             }
  250.             if(fclose(pf)==EOF)
  251.              printf("Error al cerrar el fichero.\n");
  252.         }
  253. }

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
  #2 (permalink)  
Antiguo 16/04/2010, 05:19
 
Fecha de Ingreso: junio-2008
Ubicación: Seattle, USA
Mensajes: 733
Antigüedad: 15 años, 10 meses
Puntos: 61
Respuesta: ejercicio que me da error

Tienes problemas de balanceo de llaves
  #3 (permalink)  
Antiguo 17/04/2010, 09:05
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: ejercicio que me da error

Te falta la llave que cierra el While de la ultima funcion.
Agrega una llave en la linea 249 y fijate si compila.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:32.