1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Estruturas em C - Ajuda

Discussão em 'Programação' iniciada por Craptain.Whisky, 5 de Novembro de 2012. (Respostas: 3; Visualizações: 763)

  1. Craptain.Whisky

    Craptain.Whisky Power Member

    Boas tenho estado a tarde inteira a perceber o porquê de isto estoirar, quando faço a atribuição da estrutura principal para uma temporaria ele estoira, já fiz testes e é nesta linha sublinhada que estoira:


    #include <stdio.h>
    #include <stdlib.h>
    #include "stdlib.h"
    #define MAX 1000
    int opcao;
    struct Candidatos
    {
    int nrcandidato;
    char nome [50];
    char contacto [50];
    char habilitacoes_academicas [100];
    char conhecimentos_informaticos [500];
    char conhecimentos_linguas [500];
    char nome_empresa [100];
    char cargo_funcao [80];
    float salario;
    int ano_nascimento;
    int telefone;
    char morada[100];
    } tabelaContactos[MAX];

    struct Candidatos* orgCargo(struct Candidatos tabela[], int nrcontactos, char* nome,int *nrpreenchido)
    {
    int aux;
    int i;
    int b = 0;
    struct Candidatos* tabelacargos;
    struct Candidatos temp;
    for(i = 0; i < nrcontactos; i++)
    {
    if (strcmp(tabela.cargo_funcao,nome) == 0)
    {
    tabelacargos = tabela;
    b = b + 1;
    }
    }
    for(i = 1; i < b;i++)
    {
    aux = i - 1;
    while(aux >= 0 && strcmp(tabelacargos[aux+1].cargo_funcao, tabelacargos[aux].cargo_funcao) < 0 )
    {
    temp = tabelacargos[aux + 1];
    tabelacargos[aux+1] = tabelacargos[aux];
    tabelacargos[aux] = temp;
    aux--;
    }
    }
    nrpreenchido = b;
    printf("%d",nrpreenchido);
    system("pause");
    return tabelacargos;
    }

    O que eu quero é passar uma tabela temporaria para o main só para mostrar uma listagem com os varios candidatos com x cargo. Quando faço a atribuição da posição do array da tabela principal (com todos os registos) para a tabela auxiliar(tabelacargos) é ai que estoira. Mas só quando o programa está a correr no compilador diz me que estou a usar o mesmo tipo de estrutura e tudo, daí que esteja um pouco confuso com isto :/ .
     
  2. Esfomeado

    Esfomeado Power Member

    Agora não estou com muito tempo para analisar o codigo, mais tarde vejo melhor mas em vez de passares para o main uma cópia da tabela passa antes um apontador para a mesma para evitar a repetição de dados e para optimizar o teu programa.
     
  3. xBoShY

    xBoShY Power Member

    Código:
    struct Candidatos* orgCargo(struct Candidatos tabela[], int nrcontactos, char* nome,int *nrpreenchido)
    {
    [i](...)[/i]
    struct Candidatos* tabelacargos;
    [i](...)[/i]
    tabelacargos[b] = tabela[i];
    [i](...)[/i]
    }
    tabelacargos não é uma tabela, é um ponteiro para uma estrutura Candidatos.

    Altera:
    Código:
    struct Candidatos* tabelacargos;
    Para:
    Código:
    struct Candidatos tabelacargos[[i]tamanho_tabela[/i]]
    o tamanho_tabela ou calculas apartir da tabela, ou passas pela função.
     
  4. Craptain.Whisky

    Craptain.Whisky Power Member


    Consegui resolver o problema a uns dias, era esse o problema xBoShy tive que usar o mesmo tamanho da tabela que tenho na estrutura mas ao menos consegui criar uma tabela do mesmo tipo.
    Obrigado pela ajuda ;)
     

Partilhar esta Página