Struttura inizializzata ritorna nulla - C

mandiatutti

Nuovo Utente
5
0
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;
}

Schermata 2015-07-04 alle 14.23.29.png
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili