Advertisement
sav98

Untitled

Dec 11th, 2017
75
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.15 KB | None | 0 0
  1. /*questo programma ti permette di inserire nome,cognome,anno di nascita
  2. di un determinato utente per poi stampartelo*/
  3.  
  4. #include<stdio.h>
  5. #include<stdlib.h>
  6. #include<string.h>
  7.  
  8. typedef struct cittadino {
  9. char cognome[20];
  10. char nome[20];
  11. char luogo[20];
  12. int anno;
  13. }cittadino;
  14.  
  15.  
  16. void new_aggiorna(cittadino *);
  17. cittadino aggiorna_second(cittadino);
  18. cittadino * aggiorna(char *[]);
  19. void copia_in_vect(cittadino*, cittadino, cittadino,cittadino *);
  20. void stampa(cittadino*);
  21. void stampa_vect(cittadino *);
  22. void controllo_input(int);
  23. void controllo_file(FILE *,char *);
  24. void copia_cognomi(char **,cittadino *);
  25. void leggi_da_file(FILE *,cittadino *);
  26. void scrivi_file(FILE *,cittadino *, int);
  27. void scrivi_file_cognomi(FILE *,char **,int);
  28. void clean(char **,int);
  29.  
  30. int main(int argc, char *argv[]){
  31.  
  32. char *info[]={"nappi","michele"},**cognomi;
  33.  
  34. cittadino *third,second,first,*records;
  35. int num_rec;
  36. FILE *uno,*due,*tre;
  37. controllo_input(argc);
  38. uno=fopen(argv[1],"r");
  39. controllo_file(uno,argv[1]);
  40. due=fopen(argv[2],"w");
  41. controllo_file(due,argv[2]);
  42. tre=fopen(argv[3],"w");
  43. controllo_file(tre,argv[3]);
  44.  
  45. printf("quanti sono i record da creare?\n");
  46. scanf("%d",&num_rec);
  47. records=calloc(num_rec,sizeof(cittadino));
  48. cognomi=calloc(num_rec,sizeof(char *));
  49. new_aggiorna(&first);
  50. second=aggiorna_second(first);
  51. third=aggiorna(info);
  52. printf("stampa first\n");
  53. stampa(&first);
  54. printf("stampa second\n");
  55. stampa(&second);
  56. copia_in_vect(records,first,second,third);
  57. leggi_da_file(uno,records);
  58. copia_cognomi(cognomi,records);
  59.  
  60. printf("stampa vettore \n");
  61. stampa_vect(records);
  62.  
  63. scrivi_file(due,records,num_rec);
  64. scrivi_file_cognomi(tre,cognomi,num_rec);
  65. fclose(uno);
  66. fclose(due);
  67. fclose(tre);
  68. free(records);
  69. clean(cognomi,num_rec);
  70. free(cognomi);
  71. free(third);
  72.  
  73.  
  74. return 0;
  75. }
  76. //puntatore a record non si usa il punto(.) benesì(->)
  77. void new_aggiorna(cittadino *first){
  78. printf("inserisci i dati del primo cittadino\n\n");
  79. printf("\ninserimento cognome\n");
  80. scanf("%s",first->cognome);
  81. printf("\ninsrimento nome\n");
  82. scanf("%s",first->nome);
  83. printf("\ninserimento luogo di nascita\n");
  84. scanf("%s",first->luogo);
  85. printf("\ninserimento anno di nascita\n");
  86. scanf("%d",&(first->anno));
  87. //soluzione del prof=("%s,%s,%s,%d",firts->cognome,first->nome,first->luogo,&first->anno)
  88. }
  89.  
  90. cittadino aggiorna_second(cittadino pippo){
  91. cittadino f2={0};
  92.  
  93. strcpy(f2.cognome,pippo.cognome);
  94. strcpy(f2.nome,pippo.nome);
  95. strcpy(f2.luogo,pippo.luogo);
  96. f2.anno=pippo.anno;
  97.  
  98. return f2;
  99. }
  100.  
  101. //soluzione del prof
  102.  
  103. cittadino *aggiorna(char *data[]){
  104. cittadino *new;
  105. char risposta;
  106. printf("\nvuoi inserire un nuovo cittadino?\t si=[s],\tno=[n]\n");
  107. scanf("%s",&risposta);
  108. if(risposta=='n')
  109. return NULL;
  110. else{
  111. new=malloc(sizeof(cittadino));
  112. strcpy(new->cognome,data[0]);
  113. strcpy(new->nome,data[1]);
  114. printf("inserisci luogo e anno di nascita di michele nappi\n");
  115. scanf("%s %d",new->luogo,&new->anno);
  116.  
  117. return new;
  118. }
  119. }
  120.  
  121. void copia_in_vect(cittadino *copia, cittadino uno, cittadino due, cittadino *tre){
  122.  
  123. copia[0]=uno;
  124. copia[1]=due;
  125. copia[2]=*tre;
  126. }
  127. void stampa(cittadino *a){
  128. printf("%s\n",a->cognome);
  129. printf("%s\n",a->nome);
  130. printf("%s\n",a->luogo);
  131. printf("%d\n",a->anno);
  132. }
  133. void stampa_vect(cittadino *a){
  134. int i;
  135. for(i=0;i<3;i++){
  136. printf("%s\n",a[i].cognome);
  137. printf("%s\n",a[i].nome);
  138. printf("%s\n",a[i].luogo);
  139. printf("%d\n",a[i].anno);
  140. }
  141. }
  142.  
  143. void clean(char **a,int n){
  144. int i;
  145. for(i=0;i<n;i++){
  146. free(a[i]);
  147. }
  148. }
  149.  
  150. void controllo_input(int n){
  151. if(n!=4){
  152. printf("il programma apre 3 file denominati uno,due e tre: il primo in lettura e gli alri in scrittura\n");
  153. exit(1);
  154. }
  155. }
  156.  
  157. void controllo_file(FILE *file,char *stringa){
  158. if(file!=NULL){
  159. printf("%s è stato aperto correttamente\n",stringa);
  160. }else{
  161. exit(1);
  162. }
  163. }
  164.  
  165. void leggi_da_file(FILE *in, cittadino *vect){
  166. if(fscanf(in,"%s %s %s %d",vect[3].cognome,vect[3].nome,vect[3].luogo,&vect[3].anno) !=EOF)
  167. printf("file letto\n");
  168. else
  169. printf("Il file è vuoto.");
  170. //fscanf(in,"%s %s %s %d",vect[3].cognome,vect[3].nome,vect[3].luogo,&vect[3].anno);
  171. //printf("%s %s %s %d",vect[3].cognome,vect[3].nome,vect[3].luogo,vect[3].anno);
  172. }
  173.  
  174. void scrivi_file(FILE *out,cittadino *vect,int size){
  175. int i;
  176. for(i=0;i<size;i++){
  177. fprintf(out,"\t %s %s %s %d \n",vect[i].cognome,vect[i].nome,vect[i].luogo,vect[i].anno);
  178. }
  179. }
  180.  
  181. void copia_cognomi(char **vect, cittadino *rec){
  182.  
  183. vect[0]=calloc(strlen(rec[0].cognome),sizeof(char));
  184. strcpy(vect[0],rec[0].cognome);
  185. vect[1]=calloc(strlen(rec[1].cognome),sizeof(char));
  186. strcpy(vect[1],rec[1].cognome);
  187. vect[2]=calloc(strlen(rec[2].cognome),sizeof(char));
  188. strcpy(vect[2],rec[2].cognome);
  189. vect[3]=calloc(strlen(rec[3].cognome),sizeof(char));
  190. strcpy(vect[3],rec[3].cognome);
  191. }
  192.  
  193. void scrivi_file_cognomi(FILE *out,char **vect,int size){
  194. int i;
  195. for(i=0;i<size;i++){
  196. fprintf(out,"\t %s \n",vect[i]);
  197. }
  198. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement