Advertisement
sav98

Untitled

Dec 15th, 2017
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.17 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<string.h>
  4.  
  5. typedef struct cittadino{
  6. int sesso;
  7. char cognome[20];
  8. char nome[20];
  9. char luogo[20];
  10. int anno;
  11. }cittadino;
  12.  
  13. cittadino *new_rec(char *[]);
  14. void append_file(FILE *,cittadino *);
  15. void copia_da_file(FILE *,cittadino *);
  16. void stampa(cittadino *);
  17. void controllo_input(int);
  18. void controllo_file(FILE *,char *);
  19. int conta_in_file(FILE *);
  20. void scrivi_in_file_donna(FILE *,cittadino *,int);
  21.  
  22. int main(int argc,char *argv[]){
  23. char *info[]={"verde","luisa","napoli"};
  24. cittadino *rec,*records;
  25. int num_rec;
  26. FILE *uno,*due;
  27.  
  28. controllo_input(argc);
  29.  
  30. uno=fopen(argv[1],"r+"); //r+ perchè faremo prima delle operazioni in lettura e poi in scrittura
  31. controllo_file(uno,argv[1]);
  32.  
  33. due=fopen(argv[2],"w");//dobbiamo soltanto leggere
  34. controllo_file(due,argv[2]);
  35.  
  36. rec=new_rec(info);
  37. num_rec=conta_in_file(uno);
  38. if(rec){
  39. num_rec++;
  40. append_file(uno,rec);
  41. records=calloc(num_rec,sizeof(cittadino));
  42. }else
  43. records=calloc(num_rec,sizeof(cittadino));
  44. rewind(uno);//colloca il puntatore all'inizio del FILE
  45. copia_da_file(uno,records);
  46. scrivi_in_file_donna(due,records,num_rec);
  47. fclose(uno);
  48. fclose(due);
  49. free(records);
  50.  
  51. return 0;
  52. }
  53.  
  54. cittadino *new_rec(char *info[]){
  55. char risposta;
  56. cittadino *new;
  57.  
  58. printf("vuoi inserire il cittadino? si[s]\tno[n]\n");
  59. scanf("%s",&risposta);
  60. if(risposta=='n');
  61. return NULL;
  62. if(risposta=='s'){
  63. new=malloc(sizeof(cittadino));
  64. strcpy(new->cognome,info[0]);
  65. strcpy(new->nome,info[1]);
  66. strcpy(new->luogo,info[2]);
  67. printf("inserire l'anno di nascita\n");
  68. scanf("%d",&new->anno);
  69. new->sesso=1;
  70. }
  71.  
  72. return new;
  73. }
  74.  
  75. int conta_in_file(FILE *uno){
  76. int count=0;
  77. cittadino vect;
  78. while(fscanf(uno,"%d %s %s %s %d",&vect.sesso,vect.cognome,vect.nome,vect.luogo,&vect.anno)!=EOF)
  79. count++;
  80. return count;
  81. }
  82. /*int conta_in_file(FILE * in){
  83. int conta=0, persone=0;
  84. char people;
  85.  
  86. while(!feof(in)){
  87. fscanf(in,"%s",&people);
  88. conta++;
  89.  
  90. if(conta==5){
  91. conta=0;
  92. persone++;
  93.  
  94. }
  95. }
  96. return persone;
  97. }*/
  98. void append_file(FILE *uno,cittadino *rec){
  99. fflush(uno);
  100. fprintf(uno,"%d %s %s %s %d",rec->sesso,rec->cognome,rec->nome,rec->luogo,rec->anno);
  101. }
  102.  
  103. void copia_da_file(FILE *uno,cittadino *records){
  104. int i=0;
  105. rewind(uno);
  106. while (fscanf(uno,"%d %s %s %s %d",&records[i].sesso,records[i].cognome,records[i].nome,records[i].luogo,&records[i].anno)!=EOF);
  107. i++;
  108. }
  109.  
  110. void scrivi_in_file_donna(FILE *due,cittadino *records,int num_rec){
  111. int i=0;
  112. fflush(due);
  113. for(i=0;i<num_rec;i++){
  114. if(records[i].sesso==1){
  115. fprintf(due,"%d %s %s %s %d",records[i].sesso,records[i].cognome,records[i].nome,records[i].luogo,records[i].anno);
  116. }
  117. }
  118.  
  119. }
  120.  
  121.  
  122. void controllo_input(int n){
  123. if(n!=4){
  124. printf("il programma apre 3 file denominati uno,due e tre: il primo in lettura e gli alri in scrittura\n");
  125.  
  126. }else
  127. exit(1);
  128. }
  129.  
  130. void controllo_file(FILE *file,char *stringa){
  131. if(file!=NULL){
  132. printf("%s è stato aperto correttamente\n",stringa);
  133. }else{
  134. exit(1);
  135. }
  136. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement