Allora non capisco perchè questo programma non va, praticamente mi stampa giusto soltanto la prima riga.
L'esercizio consiste nel trovare il puntoggio massimo per qualsiasi prova. esempio
rossi, 1,4,5,6,7
bianchi, 3,7,2,1,3
e dovrebbe stampare per ogni prova chi ha fatto il punteggio piu alto e il punteggio, esempio:
bianchi 3
bianchi 7
rossi 5
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NMAX 10
#define VERO 1
#define FALSO 0
struct concorrente
{
char nome[20];
int punteggi[10];
};
struct vincitore
{
char nome[20];
int punteggio;
};
int cerca_vincitori(char fileconcorso[], struct vincitore v[]);
void trova_massimi(struct vincitore v[], struct concorrente c[], int dim_vett, int nconcorrenti);
int massimo (struct concorrente c[], int n, int ngara);
struct concorrente estrai_dati(char s[], int *nprove);
int main(int argc, char *argv[])
{
struct vincitore v[NMAX];
int nprove;
int i=0;
int k=1;
if(argc != 2)
{
printf("Inserisci: <fileconcorso>");
exit(EXIT_FAILURE);
}
nprove = cerca_vincitori(argv[1], v);
printf("I vincitori sono delle prove sono:\n");
while(i < nprove)
{
printf("%2d) %s %5d\n", k++, v[i].nome, v[i].punteggio);
i++;
}
return EXIT_SUCCESS;
}
int cerca_vincitori(char fileconcorso[], struct vincitore v[])
{
FILE *fp;
struct concorrente c[NMAX];
char s[128];
int i=0;
int nprove;
int nconcorrenti=0;
if((fp = fopen(fileconcorso, "r")) == NULL)
{
printf("Errore apertura del file!!");
exit(EXIT_FAILURE);
}
while(fgets(s, 128, fp) != NULL)
{
c[nconcorrenti++] = estrai_dati(s, &nprove);
}
trova_massimi(v, c, nprove, nconcorrenti);
return nprove;
}
void trova_massimi(struct vincitore v[], struct concorrente c[], int nprove, int nconcorrenti)
{
int i, indice_max;
for(i=0; i<nprove; i++)
{
indice_max = massimo(c, nconcorrenti, i);
strcpy(v[i].nome, c[indice_max].nome);
v[i].punteggio = c[indice_max].punteggi[i];
}
return;
}
int massimo (struct concorrente c[], int nconcorrenti, int ngara)
{
int i, max, inizializzato;
inizializzato = FALSO;
for (i=0; i<nconcorrenti; i++)
{
if(!(inizializzato))
{
max = i;
inizializzato = VERO;
}
else
{
if(c[i].punteggi[ngara] > c[max].punteggi[ngara])
{
max = i;
}
}
}
return max;
}
struct concorrente estrai_dati(char s[], int *nprove)
{
struct concorrente c;
int i, j, k;
char t[10];
i=0;
j=0;
k=0;
while(s[i] != ',' && s[i] != '\0')
{
c.nome[j++] = s[i++];
}
c.nome[j] = '\0';
while(s[i] == ',' || s[i] == ' ' && s[i] != '\0')
{
i++;
}
j=0;
while(s[i] != ',' && s[i] != '\0')
{
t[j++] = s[i++];
}
t[j] = '\0';
c.punteggi[k++] = atoi(t);
j=0;
while(s[i] != ',' && s[i] != '\0')
{
t[j++] = s[i++];
}
t[j] = '\0';
c.punteggi[k++] = atoi(t);
j=0;
while(s[i] != ',' && s[i] != '\0')
{
t[j++] = s[i++];
}
t[j] = '\0';
c.punteggi[k++] = atoi(t);
j=0;
while(s[i] != ',' && s[i] != '\0')
{
t[j++] = s[i++];
}
t[j] = '\0';
c.punteggi[k++] = atoi(t);
j=0;
while(s[i] != ',' && s[i] != '\0')
{
t[j++] = s[i++];
}
t[j] = '\0';
c.punteggi[k++] = atoi(t);
j=0;
while(s[i] != ',' && s[i] != '\0')
{
t[j++] = s[i++];
}
t[j] = '\0';
c.punteggi[k++] = atoi(t);
j=0;
while(s[i] != ',' && s[i] != '\0')
{
t[j++] = s[i++];
}
t[j] = '\0';
c.punteggi[k++] = atoi(t);
j=0;
while(s[i] != ',' && s[i] != '\0')
{
t[j++] = s[i++];
}
t[j] = '\0';
c.punteggi[k++] = atoi(t);
j=0;
while(s[i] != ',' && s[i] != '\0')
{
t[j++] = s[i++];
}
t[j] = '\0';
c.punteggi[k++] = atoi(t);
j=0;
while(s[i] != ',' && s[i] != '\0')
{
t[j++] = s[i++];
}
t[j] = '\0';
c.punteggi[k++] = atoi(t);
*nprove = k;
return c;
}