Originariamente Scritto da BLOOD black
Visualizza Messaggio
Codice:
#include<stdio.h> #include<conio.h> struct studente { char cognome[20];char sesso[2];int voto;}; /*il penultimo ; puoi anche toglierlo ma ti da un warning*/ void acquisisci(FILE*,struct studente*,struct studente*,struct studente*); main() { FILE *fpi; int N; struct studente classe [20],maschi[20],femmine[20]; fpi=fopen("studenti.txt","r"); if(fpi==NULL) printf("Il file non esiste"); else { printf("*ELENCO DEGLI STUDENTI ACQUISITO DA FILE* \n\n\n\n"); acquisisci(fpi,classe,maschi,femmine); } getch(); } void acquisisci(FILE *A,struct studente *B, struct studente *E,struct studente *G) { FILE *fpm,*fpf; struct studente temp; int d,j,dmin,k; int i=0; while(fscanf(A,"%s%s%d",B[i].cognome,B[i].sesso,&B[i].voto)!=EOF) { printf("cognome= %s sesso= %s voto= %d \n\n" ,B[i].cognome,B[i].sesso,B[i].voto); i++; } fclose(A); /*Ordino i nominativi per voto mediante selection sort devo dichiarare temp di tipo struct perchè al suo interno ha B[d] che è di quel tipo */ for (d=0;d<i-1;d++) { dmin=d; for(j=d+1;j<i;j++) { if(B[j].voto<B[dmin].voto) dmin=j; } /*dopo aver ordinato le componenti per voto crescente sposto anche tutte le altre conponenti delllo struct studente quindi uso B[d] e non B[d].voto*/ temp=B[d]; B[d]=B[dmin]; B[dmin]=temp; } /*l'eventuale stampa a video sempre fuori il primo ciclo di for cioè for (d=0;d<i-1;d++) */ printf("\n\n\n*ORDINAMENTO DEGLI STUDENTI PER VOTO* \n\n\n\n"); for(d=0;d<i;d++) printf("cognome= %s sesso= %s voto= %d \n\n",B[d].cognome,B[d].sesso,B[d].voto); /*Rilevazione maschi */ j=0; k=0; for(d=0;d<i;d++) { if(B[d].sesso[0]=='M') { E[j]=B[d]; j++; } else { G[k]=B[d]; k++; } } printf("\n\nI maschi presenti sono %d le femmine %d\n\n",j,k); /*Stampa su file*/ fpm=fopen("maschio.txt","w"); if(fpm==NULL) printf("Non riesco a scrivere il file"); else { for(d=0;d<j;d++) fprintf(fpm,"%s %s %d \n",E[d].cognome,E[d].sesso,E[d].voto); } fclose(fpm); fpf=fopen("femmina.txt","w"); if(fpf==NULL) printf("Non riesco a scrivere il file"); else { for(d=k;d>=0;d--) fprintf(fpf,"%s %s %d \n",G[d].cognome,G[d].sesso,G[d].voto); } fclose(fpf); }
Da cosa può dipende ?
Edit.
Dipendeva dall'ultimo for andava inmpostato in questo modo
for(d=k-1;d>=0;d--)
fprintf(fpf,"%s %s %d \n",G[d].cognome,G[d].sesso,G[d].voto);
}
Commenta