Ciao a tutti,
vi posto il codice che sto scrivendo per un programma: date in input (da file txt) una serie di "persone" (caratterizzate da una stringa per il nome, una per il cognome, ...),devo ordinare tali persone in ordine crescente in base al cognome; infine stampo il tutto.
Il compilatore mi da problemi circa nell'insertion sort e al passaggio dei parameti alla funzione.
Sono ancora principiante, sto studiando all'università...ringrazio molto chi mi può dare una mano!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NUM 3
typedef struct el { /*animatore*/
char nome[12];
char cognome[15];
char numero[11];
char mail[28];
char data[9];
}el;
typedef el animatore[NUM];
animatore a;
FILE *fin, *fout;
void insertionsort (animatore v[], int dim){ /*ordino l'array in base al cognome*/
int i_sist, i_contr;
animatore val_sist;
for(i_sist = 0; i_sist < dim -1; i_sist ++){
val_sist = v[i_sist +1];
i_contr = i_sist;
while(i_contr >= 0 && (strcmp(v[i_contr].cognome , v[i_sist +1].cognome) >0)){
v[i_contr + 1] = v[i_contr];
i_contr --;
}
v[i_contr+1] = val_sist;
}
}
int main() {
animatore a;
int i,l=0;
char x;
fin = fopen("grest.txt", "r"); /* copio carattere per carattere le diverse stringhe*/
x = fgetc(fin);
for(i=0;i<NUM; i++){
if(x==EOF) break;
while(x!=(char)(32)){
a.nome[l] = x;
l++;
x = fgetc(fin);
}
l=0;
while(x!=(char)(32)){ /*quando trovo uno spazio tra una stringa all'altra, passo al cognome*/
a.cognome[l] = x;
l++;
x = fgetc(fin);
}
l=0;
while(x!=(char)(32)){
a.numero[l] = x;
l++;
x = fgetc(fin);
}
l=0;
while(x!=(char)(32)){
a.data[l] = x;
l++;
x = fgetc(fin);
}
l=0;
while(x!=EOF || x!='/'){ /*al termine di ogni riga, ho questo carattere, così so quando cambiare persona*/
a.mail[l] = x;
l++;
x = fgetc(fin);
}
l=0;
}
fclose(fin);
insertionsort(&a,NUM);
for(i=0;i<NUM; i++)
printf("%s\t%s\t%d\t%s\t%s\n", a.nome, a.cognome, atoi(a.numero), a.mail, a.data);
system("PAUSE");
return 0;
}
|