#include int main() { FILE*fp,*fp2; char s[100000],pn[100],pn2[100],c; void incoming(char*),elab(FILE*,FILE*,char*,int),exist(char*,FILE**); int select; printf("\n1) Crittare\n\n2) Decrittare\n\n_");scanf("%d",&select);for(;(getchar())!='\n';); switch(select) {case 1:printf("\nInserire il testo ,quindi premere EOF .\n\n_");incoming(s); printf("\nInserire il pathname del file dove si vogliono salvare i dati : "); scanf("%s",pn);for(;(getchar())!='\n';); exist(pn,&fp);//NOTA_1 elab(fp,fp2,s,select);break; case 2:printf("\nInserire il pathname del file crittato : ");scanf("%s",pn);for(;(getchar())!='\n';); printf("\nInserire il pathname del file output : ");scanf("%s",pn2);for(;(getchar())!='\n';); if(!(fp=fopen(pn,"r"))) {fprintf(stderr,"Impossibile accedere al file %s\n",pn);exit(1);} exist(pn2,&fp2); elab(fp,fp2,s,select);break; default:fprintf(stderr,"\nSciegliere una scelta che compare nell'elenco .\n");exit(1);} return 0; } void incoming(char*s) { for(;(*s=getchar())!=EOF;++s); *s='\0'; } void elab(FILE*fp,FILE*fp2,char*s,int select) { int i; switch(select) {case 1:for(;*s!='\0';++s) {if(*s>='a'&&*s<='z') i=*s-97; else if(isdigit(*s)) i=*s-22; else i=*s+700; fwrite(&i,sizeof(int),1,fp);}fclose(fp);break; case 2:for(;fread(&i,sizeof(int),1,fp)>0;)//NOTA_2 {if(i>=0&&i<=25) i+=97; else if(i>=26&&i<=35) i+=22; else i-=700; //fwrite(&i,sizeof(int),1,fp2);}fcloseall();} putc(i,fp2);}fcloseall();}//NOTA_3 } void exist(char*pn,FILE**fp) { char c; if(*fp=fopen(pn,"r")) {printf("\n%s esistente ,sovrascriverlo ?(s/n) ",pn);scanf("%c",&c);//` for(;(getchar())!='\n';); switch(c)//` {case 's':if(!(*fp=freopen(pn,"w+",*fp))) {fprintf(stderr,"Impossibile scrivere su %s\n",pn); fclose(*fp);exit(1);}break;//` default:exit(0);}} else {if(!(*fp=fopen(pn,"w+"))) {fprintf(stderr,"Impossibile scrivere su %s\n",pn);fclose(*fp);exit(1);}}//` } /*NOTA_1 Questo programma e' un esercizio d'utilizzo di fwrite e fread (vedi il nuovo pacchetto di esercizi in c di -=]MaelstroM[=- . void exist(char*,FILE**) fa uscire il programma se non si vuole sovrascrivere un file ,se e' impossibile accedervi . NOTA_2 fread legge e formatta dati binari ,se cio' che ritorna e' minore del suo terzo argomento si e' verificato un errore in lettura . NOTA_3 in questo caso e' piu' consono l'utilizzo di una funzione che opera su file testuali . L'utilizzo di fwrite si rivela completamente inutile ed inadeguato .*/