Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Programma per la generazione di un file binario che chiede all'utente il numero di coppie da inserire.
- Il file conterrà il numero di coppie, le ascisse(float) inserite in maniera ordinata, le ordinate(double) inserite in senso inverso.*/
- #include<stdio.h>
- #include<stdlib.h>
- #define SL 256
- #define NOME_FILE "dati.bin"
- typedef FILE* pfile;
- typedef float* pfloat;
- typedef double* pdouble;
- int main(void)
- {
- int n,i;
- char s[SL];
- pfloat p_x;
- pdouble p_y;
- pfile p_bin;
- if((p_bin=fopen(NOME_FILE,"wb"))==NULL) goto fopen_err;
- printf("Inserire il numero di dati\n");
- scanf ("%s",s);
- n=atoi(s);
- fwrite(&n, sizeof(int),1,p_bin);
- if ((p_x=(pfloat)malloc(sizeof(float)*n))==NULL) goto mem_err;
- for(i=0; i<n; i++)
- {
- printf("inserisci x(%d)=", i+1);
- scanf ("%s",s);
- p_x[i]=atof(s);
- fwrite(&p_x[i], sizeof(float),1,p_bin);
- }
- /*free(p_x); puoi fare qui la free se non ti serve fare la verifica tramite la fread in seguito*/
- if ((p_y=(pdouble)malloc(sizeof(double)*n))==NULL) goto mem_err;
- for(i=n-1; i>=0; i--)
- {
- printf("inserisci y(%d)=", i+1);
- scanf ("%s",s);
- p_y[i]=atof(s);
- fwrite(&p_y[i], sizeof(double),1,p_bin);
- }
- /*free(p_y); idem commento precedente*/
- fclose(p_bin);
- if((p_bin=fopen(NOME_FILE,"rb"))==NULL) goto fopen_err;
- if(fread(&n,sizeof(int),1,p_bin)!=1) goto fread_err;
- printf("il numero di dati è:%d\n", n);
- if(fread(p_x,sizeof(float),n,p_bin)!=n) goto fread_err;
- for (i=0;i<n;i++)
- printf("x[%d]=%.2f\n", i+1,p_x[i]);
- free(p_x);
- if(fread(p_y,sizeof(double),n,p_bin)!=n) goto fread_err;
- for (i=0;i<n;i++)
- printf("y[%d]=%.2lf\n",n-i,p_y[i]);
- free (p_y);
- fclose(p_bin);
- return EXIT_SUCCESS;
- fopen_err: printf("C'è un errore nell'apertura del file\n"); return EXIT_FAILURE;
- mem_err: printf("Non c'è abbastanza spazio in memoria\n"); return EXIT_FAILURE;
- fread_err: printf("Il numero acquisito è diverso dal numero inserito\n"); return EXIT_FAILURE;
- }
Advertisement
Add Comment
Please, Sign In to add comment