samuelo123

generatorebinariov3

May 14th, 2019
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.04 KB | None | 0 0
  1. //programmino per generare un file binario con dei dati numerici: per testare la soluzione del compito del professore russo di giorno 1 febbraio 2017
  2. #include<stdio.h>
  3. #include<stdlib.h>
  4. #include<math.h>
  5.  
  6. #define NOMEFILE "numeribinari.bin"
  7. #define STRLEN   5
  8.  
  9. typedef FILE* pfile;
  10. typedef float tipo1;
  11. typedef double tipo2;
  12.  
  13.  
  14. int main(void)
  15.  {pfile pbin;//per puntare al file binario
  16.   tipo1 numeri_tipo1[]={1,3,4,5,6},numeri_tipo1_letti[STRLEN];
  17.   tipo2 numeri_tipo2[]={2,4,5,4,2},numeri_tipo2_letti[STRLEN];
  18.   int n=STRLEN,n_letto,i;
  19.    
  20.   if((pbin=fopen(NOMEFILE,"wb"))==NULL) return EXIT_FAILURE;
  21.   //adesso scrivo nel file binario dei numeri che ho deciso sopra io
  22.  
  23.   fwrite(&n,sizeof(int),1,pbin);                  //numero di numeri dei vari tipi
  24.   fwrite(numeri_tipo1,sizeof(tipo1),STRLEN,pbin); //numeri primo tipo
  25.   fwrite(numeri_tipo2,sizeof(tipo2),STRLEN,pbin); //numeri secondo tipo
  26.  
  27.   //il sizeof di un vettore ci da in numero di byte quindi potremmo capire il numero di elementi facendo il sizeof del vettore diviso il sizeof del tipo
  28.  
  29.   //adesso lo chiudo per riaprirlo in lettura
  30.   fclose(pbin);  //è importante chiuderlo oppure non potrebbe riaprilo perché linux impedisce di lavorare in parallelo con lo stesso file
  31.  
  32.   if((pbin=fopen(NOMEFILE,"rb"))==NULL) return EXIT_FAILURE;
  33.  
  34.   fread(&n_letto,sizeof(int),1,pbin);                  //numero di numeri dei vari tipi
  35.   fread(numeri_tipo1_letti,sizeof(tipo1),STRLEN,pbin); //numeri primo tipo
  36.   fread(numeri_tipo2_letti,sizeof(tipo2),STRLEN,pbin); //numeri secondo tipo  
  37.  
  38.   //fread((vettore2),sizeof(float),5,pbin);
  39.  
  40.   fclose(pbin); //lo chiudo per liberare memoria
  41.  
  42.   //ora stampo su schermo il tutto per verificare che coincidano sia quelli del vettore iniziale sia quelli letti
  43.   printf("%d                     %d\n",n,n_letto);
  44.   for (i=0; i<STRLEN; i++)
  45.     {
  46.       printf("  %f ",numeri_tipo1[i]);
  47.       printf("%f   ",numeri_tipo2[i]);
  48.       printf("  %f ",numeri_tipo1_letti[i]);
  49.       printf("%f \n",numeri_tipo2_letti[i]);
  50.     }
  51.          
  52.  }
Advertisement
Add Comment
Please, Sign In to add comment