Reputation: 11
I'm new to programing and I need to do this work that I simulate a football league.
First I define my structure and next I wrote a function [void def_equipa(struct s_equipa *equip, int i)
] to define the team.
The next function [void tabela()
], I pretend to write a table organized and call that function on the main, but when I compile the table doesn't show up.
Can I get some help? Thanks
#include <stdio.h>
#include <string.h>
#define NEQS 18;
//ponto1
typedef struct s_equipa // nome da estrutura
{
char nome[15]; //nome da equipa
char estadio[50]; //nome do estádio
int pontos; //numero de pontos
int n_vitorias; //numero de vitorias
int n_empates; //numero de empates
int n_derrotas; //numero de derrotas
int n_golos_marcados; //numero de golos marcados
int n_golos_sofridos; //numero de golos sofridos
} t_equipa; // nome do tipo associado
//ponto 2
void def_equipa(struct s_equipa *equip, int i)
{
//vetor com o nome das 18 equipas
char *nomes[18] = {"Arouca", "Belenenses", "Benfica", "Boavista", "Braga", "Estoril", "Famalicao", "Gil Vicente", "Maritimo", "Moreirense", "Pacos Ferreira", "Porto","Portimonense", "Santa Clara","Sporting","Tondela","Vitoria","Vizela"};
//vetor com o nome dos 18 estadios correspondentes a cada equipa
char *estadios[18] ={"Estádio Municipal de Arouca","Estádio do Restelo","Estádio da Luz","Estádio do Bessa","Estádio Municipal de Braga","Estádio António Coimbra da Mota","Estádio Municipal 22 de Junho","Estádio Cidade de Barcelos","Estádio dos Barreiros","Estádio Comendador Joaquim de Almeida Freitas","Estádio da Capital do Móvel","Estádio Do Dragao","Estádio do Portimonense","Estádio de São Miguel","Estádio José Alvalade","Estádio João Cardoso","Estádio Dom Afonso Henriques","Estádio Do Vizela"};
//Definir equipa 1
strcpy( (*equip).nome, nomes[i]); //strcpy é uma função da biblioteca string.h que copia da fonte para o vetor de destino atraves de apontador
strcpy( (*equip).estadio, estadios[i]); //
equip->pontos = 00; //usou se o apontador para colocar os pontos, vitorias, etc tudo a 0
equip->n_vitorias = 00;
equip->n_empates = 00;
equip->n_derrotas = 0;
equip->n_golos_marcados = 00;
equip->n_golos_sofridos = 00;
}
void tabela()
{
printf("\n");
struct s_equipa equipas[18]; //define a estrutura das 18 equipas
struct s_equipa *equip; //*equip é o apontador
for (int i =0; i<18; i++) //ciclo para prencher a tabela
{
def_equipa(equip, i);
equipas[i]=*equip;
//print da tabela
printf("%s %d %d %d %d %d %d\n",equip->nome, equip->pontos, equip->n_vitorias, equip->n_empates, equip->n_derrotas, equip->n_golos_marcados, equip->n_golos_sofridos);
}
}
int main()
{
tabela();
}
Upvotes: 1
Views: 57
Reputation: 311088
Within this function
void tabela()
{
printf("\n");
struct s_equipa equipas[18]; //define a estrutura das 18 equipas
struct s_equipa *equip; //*equip é o apontador
for (int i =0; i<18; i++) //ciclo para prencher a tabela
{
def_equipa(equip, i);
equipas[i]=*equip;
//print da tabela
printf("%s %d %d %d %d %d %d\n",equip->nome, equip->pontos, equip->n_vitorias, equip->n_empates, equip->n_derrotas, equip->n_golos_marcados, equip->n_golos_sofridos);
}
}
you are using an uninitialized pointer equip
struct s_equipa *equip; //*equip é o apontador
So this call
def_equipa(equip, i);
invokes undefined behavior.
It seems you mean
struct s_equipa *equip = equipas; //*equip é o apontador
Also in the second function instead of using the pointer equip in these statements
strcpy( (*equip).nome, nomes[i]); //strcpy é uma função da biblioteca string.h que copia da fonte para o vetor de destino atraves de apontador
strcpy( (*equip).estadio, estadios[i]); //
equip->pontos = 00; //usou se o apontador para colocar os pontos, vitorias, etc tudo a 0
equip->n_vitorias = 00;
equip->n_empates = 00;
equip->n_derrotas = 0;
equip->n_golos_marcados = 00;
equip->n_golos_sofridos = 00;
you need to use the pointer expression
equip + i
That is within the function in its beginning you should write
equip += i;
Or alternatively in the first function within the for loop you can write
for (int i =0; i<18; i++) //ciclo para prencher a tabela
{
equip = equipas + i;
def_equipa(equip, i);
//...
And remove thus statement that is already redundant
equipas[i]=*equip;
Upvotes: 1