elelomb

generatore_file_bin

May 16th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.21 KB | None | 0 0
  1. /*Programma per la generazione di un file binario che chiede all'utente il numero di coppie da inserire.
  2.   Il file conterrà il numero di coppie, le ascisse(float) inserite in maniera ordinata, le ordinate(double) inserite in senso inverso.*/
  3.  
  4.  
  5. #include<stdio.h>
  6. #include<stdlib.h>
  7.  
  8. #define SL        256
  9. #define NOME_FILE "dati.bin"
  10.  
  11. typedef FILE*     pfile;
  12. typedef float*    pfloat;
  13. typedef double*   pdouble;
  14.  
  15. int main(void)
  16.   {
  17.     int     n,i;
  18.     char    s[SL];
  19.     pfloat  p_x;
  20.     pdouble p_y;
  21.     pfile   p_bin;
  22.  
  23.     if((p_bin=fopen(NOME_FILE,"wb"))==NULL) goto fopen_err;
  24.     printf("Inserire il numero di dati\n");
  25.     scanf ("%s",s);
  26.     n=atoi(s);
  27.     fwrite(&n, sizeof(int),1,p_bin);
  28.     if ((p_x=(pfloat)malloc(sizeof(float)*n))==NULL) goto mem_err;
  29.  
  30.     for(i=0; i<n; i++)
  31.       {
  32.         printf("inserisci x(%d)=", i+1);
  33.         scanf ("%s",s);
  34.         p_x[i]=atof(s);
  35.         fwrite(&p_x[i], sizeof(float),1,p_bin);
  36.       }
  37.    
  38.     /*free(p_x);  puoi fare qui la free se non ti serve fare la verifica tramite la fread in seguito*/
  39.  
  40.     if ((p_y=(pdouble)malloc(sizeof(double)*n))==NULL) goto mem_err;
  41.  
  42.     for(i=n-1; i>=0; i--)
  43.       {
  44.         printf("inserisci y(%d)=", i+1);
  45.         scanf ("%s",s);
  46.         p_y[i]=atof(s);
  47.         fwrite(&p_y[i], sizeof(double),1,p_bin);
  48.       }
  49.    
  50.     /*free(p_y);  idem commento precedente*/
  51.  
  52.     fclose(p_bin);
  53.  
  54.     if((p_bin=fopen(NOME_FILE,"rb"))==NULL) goto fopen_err;
  55.     if(fread(&n,sizeof(int),1,p_bin)!=1)    goto fread_err;
  56.     printf("il numero di dati è:%d\n", n);
  57.  
  58.     if(fread(p_x,sizeof(float),n,p_bin)!=n) goto fread_err;
  59.     for (i=0;i<n;i++)
  60.       printf("x[%d]=%.2f\n", i+1,p_x[i]);
  61.  
  62.     free(p_x);
  63.  
  64.     if(fread(p_y,sizeof(double),n,p_bin)!=n) goto fread_err;
  65.     for (i=0;i<n;i++)
  66.       printf("y[%d]=%.2lf\n",n-i,p_y[i]);
  67.  
  68.     free  (p_y);
  69.     fclose(p_bin);    
  70.     return EXIT_SUCCESS;
  71.  
  72.     fopen_err: printf("C'è un errore nell'apertura del file\n");              return EXIT_FAILURE;
  73.     mem_err:   printf("Non c'è abbastanza spazio in memoria\n");              return EXIT_FAILURE;
  74.     fread_err: printf("Il numero acquisito è diverso dal numero inserito\n"); return EXIT_FAILURE;
  75.   }
Advertisement
Add Comment
Please, Sign In to add comment