Ricardo
Ricardo

Reputation: 11

Can't show the table

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

Answers (1)

Vlad from Moscow
Vlad from Moscow

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

Related Questions