Questo programma dovrebbe leggere da un file di testo, diversi dati. In particolare, deve leggere la prima riga che corrisponde al numero di dati contenuti nel file e poi fare le varie operazioni. Bisogna prendere dei tempi da una classifica di formula1, convertirli in secondi (ho preferito farlo così) e stampare questi dati su un altro file di testo, ordinandoli però dal più basso al più alto.
codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct corridore{
char nome[200];
char naz [4];
char sqd[4];
int time;
};
void ordina(struct corridore *classifica, int num){
int i, j;
struct corridore temp;
for (i=(num-1); i>0; i--){
for (j=1; j<=i; j++){
if (classifica [j-1].time > classifica[j].time){
temp=classifica[j-1];
classifica[j-1] = classifica[j];
classifica[j] = temp;
}
}
}
}
int main(int argc, char *argv[]){
FILE *fin, *fout;
char buf [2048];
int num;
int i=0;
int h=0, m=0, s=0;
fin = fopen (argv[1], "r");
fout = fopen (argv[2], "w");
fgets (buf, sizeof(buf), fin); /*Legge la prima riga che indica quanti partecipanti in gara*/
num = atoi(buf);
struct corridore *classifica = malloc(sizeof(struct corridore) *num);
if (classifica == NULL){
printf("Rilevato errore nella classifica\n");
return -1;
}
while (fgets (buf,sizeof(buf), fin) != NULL){
strcpy (classifica[i].nome, strtok(buf, ",")); /*Mette in nome, l'i*esimo nome da tok*/
strcpy (classifica[i].naz, strtok(NULL, ",")); /*Mette in naz, l'i*esimo nome da tok*/
strcpy (classifica[i].sqd, strtok(NULL, ",")); /*Mette in sqd, l'i*esimo nome da tok*/
{h = atoi(strtok(NULL, ":"));
m = atoi(strtok(NULL, ":"));
s = atoi(strtok(NULL, ":"));
classifica[i].time = (h*3600 + m*60 + s); /*Mette in time il tempo calcolato in secondi*/
}
ordina(classifica, num);
fprintf(fout, "%s %ds\n", buf,corridore classifica[i].time);
}
fclose(fin);
fclose(fout);
return 0;
}
Se per esempio gli faccio leggere il file con la classifica con 20 dati inseriti, questo mi stampa sull'altro file il nome del corridore (come dovrebbe fare) e accanto a lui uno 0 che dovrebbe essere il tempo convertito in secondi a parte per l'ultimo della lista che lo converte come dovrebbe e mi stampa il suo valore.
Perchè fa questo? Non capisco cosa sbaglio...
Compila tranquillamente.