Sera a tutti come da titolo ho questo problema devo ordinare in ordine di età le liste contenute in un file:
il mio problema sorge qui... int ordina(struct persona a[], int n){....... nel momento della stampa mi escono caratteri incomprensibili aiuto...ho una consegna domani.. grazie :D
Codice:
#include<stdio.h>#include<stdlib.h>
#include<string.h>
struct persona {
char nome[20];
char cognome[20];
int anni;
};
void crea_file(char *);
struct persona crea_s();
void vedi_file(char *);
void stampa(struct persona);
void cerca(char *);
void copia (char *);
int ordina (struct persona[], int n);
int main(){
char v[20];
printf("***\t Welcome to ex 01 =D *** \n\n\n");
printf("Inserire nome file da creare: ");
scanf("%s",&v);
crea_file(v);
vedi_file(v);
cerca(v);
copia(v);
system("PAUSE");
return 0;
}
void crea_file(char *v){
struct persona p;
FILE *fp;
int fine=0;
int numero=0;
if((fp=fopen(v,"wb"))==NULL){
printf("Errore apertura file -.-' \n");
}
while(!fine){
p=crea_s();
fwrite(&p,sizeof(struct persona),1,fp);
printf("FINE SI=1, NO=0 ");
scanf("%d",&fine);
}
printf("Quale persona vuoi stampare:");
scanf("%d",&numero);
fseek(fp,(numero)*sizeof(struct persona),SEEK_SET);
fread(&p,sizeof(struct persona),1,fp);
printf("\n%s",p.nome);
fclose(fp);
}
struct persona crea_s(){
struct persona p;
printf("\nNome: ");
scanf("%s",p.nome);
printf("\nCognome: ");
scanf("%s",p.cognome);
printf("\nAnni: ");
scanf("%d",&p.anni);
return p;
}
void vedi_file(char *v){
struct persona p;
FILE *fp;
int k=0;
if((fp=fopen(v,"rb"))==NULL){
printf("Errore! \n");
}
fread(&p,sizeof(struct persona),1,fp);
while(!feof(fp)){
stampa(p);
fread(&p,sizeof(struct persona),1,fp);
k++;
}
printf("%d",k);
struct persona a[k];
ordina(a,k);
fclose(fp);
}
void stampa(struct persona p){
printf("\n*************************\n");
printf("* Nome: %s\n",p.nome);
printf("* Cognome: %s\n",p.cognome);
printf("* Anni: %d\n",p.anni);
printf("*************************\n");
}
void cerca(char *v){
struct persona p;
FILE *fp;
char c[20];
int k=0;
if((fp=fopen(v,"rb"))==NULL){
printf("Errore!\n");
}
printf("Inserisci il cognome da ricercare: ");
scanf("%s",c);
while(fread(&p,sizeof(struct persona),1,fp)>0)
if(!strcmp(p.cognome,c)){
printf("Trovato\n");
stampa(p);
}
fclose(fp);
}
void copia(char *v){
struct persona p;
FILE *f_in, *f_out;
int buf[500];
char nf[20];
printf("Nome file in cui si vuol copiare:\n");
scanf("%s",nf);
if((f_in=fopen(v,"rb")) && (f_out=fopen(nf,"wb"))){
size_t b;
while(b=fread(buf,1,500,f_in))
fwrite(buf,1,500,f_out);
}
fclose(f_in);
fclose(f_out);
}
[COLOR=#ff0000]int ordina(struct persona a[], int n){[/COLOR]
int i, j;
int temp;
j=i;
for(i=0;i<n-1;i++){
for(j=0;j<n-1-i;j++)
if(a[j].anni>a[j+1].anni){
temp=a[j].anni;
a[j].anni=a[j+1].anni;
a[j+1].anni=temp;
}
}
printf("le date in ordine non decrescente : ");
for(i=0;i<n;i++){
printf("\n%s %s %d\n", a[i].nome, a[i].cognome, &a[i].anni);
}
}