Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<stdio.h>
- #include<stdlib.h>
- #include<string.h>
- typedef struct cittadino{
- int sesso;
- char cognome[20];
- char nome[20];
- char luogo[20];
- int anno;
- }cittadino;
- cittadino *new_rec(char *[]);
- void append_file(FILE *,cittadino *);
- void copia_da_file(FILE *,cittadino *);
- void stampa(cittadino *);
- void controllo_input(int);
- void controllo_file(FILE *,char *);
- int conta_in_file(FILE *);
- void scrivi_in_file_donna(FILE *,cittadino *,int);
- int main(int argc,char *argv[]){
- char *info[]={"verde","luisa","napoli"};
- cittadino *rec,*records;
- int num_rec;
- FILE *uno,*due;
- controllo_input(argc);
- uno=fopen(argv[1],"r+"); //r+ perchè faremo prima delle operazioni in lettura e poi in scrittura
- controllo_file(uno,argv[1]);
- due=fopen(argv[2],"w");//dobbiamo soltanto leggere
- controllo_file(due,argv[2]);
- rec=new_rec(info);
- num_rec=conta_in_file(uno);
- if(rec){
- num_rec++;
- append_file(uno,rec);
- records=calloc(num_rec,sizeof(cittadino));
- }else
- records=calloc(num_rec,sizeof(cittadino));
- rewind(uno);//colloca il puntatore all'inizio del FILE
- copia_da_file(uno,records);
- scrivi_in_file_donna(due,records,num_rec);
- fclose(uno);
- fclose(due);
- free(records);
- return 0;
- }
- cittadino *new_rec(char *info[]){
- char risposta;
- cittadino *new;
- printf("vuoi inserire il cittadino? si[s]\tno[n]\n");
- scanf("%s",&risposta);
- if(risposta=='n');
- return NULL;
- if(risposta=='s'){
- new=malloc(sizeof(cittadino));
- strcpy(new->cognome,info[0]);
- strcpy(new->nome,info[1]);
- strcpy(new->luogo,info[2]);
- printf("inserire l'anno di nascita\n");
- scanf("%d",&new->anno);
- new->sesso=1;
- }
- return new;
- }
- int conta_in_file(FILE *uno){
- int count=0;
- cittadino vect;
- while(fscanf(uno,"%d %s %s %s %d",&vect.sesso,vect.cognome,vect.nome,vect.luogo,&vect.anno)!=EOF)
- count++;
- return count;
- }
- /*int conta_in_file(FILE * in){
- int conta=0, persone=0;
- char people;
- while(!feof(in)){
- fscanf(in,"%s",&people);
- conta++;
- if(conta==5){
- conta=0;
- persone++;
- }
- }
- return persone;
- }*/
- void append_file(FILE *uno,cittadino *rec){
- fflush(uno);
- fprintf(uno,"%d %s %s %s %d",rec->sesso,rec->cognome,rec->nome,rec->luogo,rec->anno);
- }
- void copia_da_file(FILE *uno,cittadino *records){
- int i=0;
- rewind(uno);
- while (fscanf(uno,"%d %s %s %s %d",&records[i].sesso,records[i].cognome,records[i].nome,records[i].luogo,&records[i].anno)!=EOF);
- i++;
- }
- void scrivi_in_file_donna(FILE *due,cittadino *records,int num_rec){
- int i=0;
- fflush(due);
- for(i=0;i<num_rec;i++){
- if(records[i].sesso==1){
- fprintf(due,"%d %s %s %s %d",records[i].sesso,records[i].cognome,records[i].nome,records[i].luogo,records[i].anno);
- }
- }
- }
- void controllo_input(int n){
- if(n!=4){
- printf("il programma apre 3 file denominati uno,due e tre: il primo in lettura e gli alri in scrittura\n");
- }else
- exit(1);
- }
- void controllo_file(FILE *file,char *stringa){
- if(file!=NULL){
- printf("%s è stato aperto correttamente\n",stringa);
- }else{
- exit(1);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement