Ciao a tutti! Stavo rifacendo il codice di un testo d'esame e nella ricerca del motivo per cui andasse in loop ho scoperto che il vettore di strutture che nel codice si chiama squadre[] non viene inizializzato... cioè nel main dentro il while dove c'è fgets e n_squadre < 50 c'è un'assegnazione che non va a termine... Praticamente al termine della funzione estrai dati la struttura s appartenente alla funzione è inizializzata, ma al ritorno nel main no! Posto anche una schermata di debug che ho fatto... Grazie in anticipo!
#include <stdio.h>#include <stdlib.h>
#include <string.h>
struct tipo_squadra
{
char nome[31];
int n_concorrenti;
char nomi_concorrenti[20][33];
};
struct tipo_squadra estrai_dati(char rig[]);
void trova_vincitori(struct tipo_squadra squad[], int n_squadre);
void stampa_vincitori(struct tipo_squadra teams[], int dim);
int main(int argc, char*argv[])
{
struct tipo_squadra squadre[50];
int n_squadre;
FILE *fin;
char riga[512];
n_squadre=0;
if(argc!=2)
{
printf("numero argomenti insufficiente\n");
exit (EXIT_FAILURE);
}
if((fin=fopen(argv[1], "r"))!= NULL)
{
printf("apertura file riuscita\n");
}
else
{
printf("errore apertura file\n");
exit (EXIT_FAILURE);
}
while(fgets(riga, 511, fin)!= NULL && n_squadre<50)
{
squadre[n_squadre]=estrai_dati(riga);
n_squadre++;
printf("numero concorrenti della squadra %s :%d\n", squadre[n_squadre].nome, squadre[n_squadre].n_concorrenti);
}
printf("numero squadre:%d", n_squadre);
getchar();
trova_vincitori(squadre, n_squadre);
return (EXIT_SUCCESS);
}
struct tipo_squadra estrai_dati(char rig[])
{
int i;
int j;
int k;
i=j=k=0;
struct tipo_squadra s;
int concorrenti=1;
while(rig== ' ')
{
i++;
}
while(rig != ':')
{
s.nome[j]=toupper(rig);
i++;
j++;
}
s.nome[j]='\0';
i++;
j=0;
while(rig!='\0')
{
if(rig== ' ')
i++;
if(rig==',')
{
s.nomi_concorrenti[k][j] = '\0';
concorrenti+=1;
k++;
j=0;
}
s.nomi_concorrenti[k][j]=rig;
i++;
j++;
}
s.n_concorrenti=concorrenti;
printf("numero concorrenti nella funzione: %d\n", s.n_concorrenti);
return s;
}
void trova_vincitori(struct tipo_squadra squad[], int n_squadre)
{
int i;
int j;
i=j=0;
struct tipo_squadra vincitori[n_squadre];
vincitori[j]=squad;
i++;
while (i<n_squadre)
{
/*printf("vincitori: %d, squad: %d", vincitori[j].n_concorrenti, squad.n_concorrenti);*/
if(vincitori[j].n_concorrenti<squad.n_concorrenti)
{
printf("%d \n", j);
j=0;
vincitori[j]=squad;
}
else if(squad.n_concorrenti == vincitori[j].n_concorrenti)
{
j++;
vincitori[j]=squad;
}
i++;
}
getchar();
stampa_vincitori(vincitori, j);
return;
}
void stampa_vincitori(struct tipo_squadra teams[], int dim)
{
/*alla funzine è stata passato un vettore di strutture che contiene le strutture dei vincitori e la dimensione del vettore*/
printf("Vincono le squadre con %d concorrenti.\n", dim);
int contatore1;
int contatore2;
while(contatore1<= dim)
{
printf("Squadra %s composta da:\n", teams[contatore1].nome);
while( contatore2 <= teams[contatore1].n_concorrenti)
{
printf("%s\n", teams[contatore1].nomi_concorrenti[contatore2]);
}
printf("\n");
contatore1++;
}
contatore2++;
return;
}