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.