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.
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.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; }
Perchè fa questo? Non capisco cosa sbaglio...
Compila tranquillamente.

Rispondi quotando