Ir ao conteúdo
  • Cadastre-se

C Erro em struct e funções em c


Posts recomendados

:DOlá!

Galera novamente estou aqui e estou com um problema no código abaixo.

Se alguém puder me ajudar com ele ficarei grato, não sei o porque de ele não funcionar.

O código esta num arquivo em anexo.

#include<stdio.h>
#include<string.h>

typedef struct funcionario {
    int nrmatricula;
    char nome[40];
    float salario;
}funcCorp;

void ordem_stru (int tamanho, struct funcionario *p);
int pesquisaBinaria(struct funcionario *p, int inicio, int fim, int busca);

int main (){
    int n, busca;
    funcCorp func[n];
    
    printf("Quantos funcionarios tem na empresa?");
    scanf("%i", n);
    
    for(int x=0; x<n; x++){
        printf("\nnumero da matricula: ");
        scanf("%i", &func[x].nrmatricula);
        
        printf("\nnome: ");
        scanf("%s", func[x]);
        
        printf("\nsalario: ");
        scanf("%f", &func[x].salario);
        
    }
    ordem_stru(n, func);
    
    printf("Qual numero de matricula voce busca?");
    scanf("%i", &busca);
    
    busca = pesquisaBinaria(func,0,n-1, busca);
}

void ordem_stru (int tamanho, struct funcionario *p){
    
    int x,y;
    //resolvi criar uma outra struct por preguiça de ficar alocando caracteres iguais hehe
    // aux.a e mais rápido que aux.nrmatricula
    struct Aux{
        int a;
        char b[40];
        float c;
    }aux;
    
    for(x=0;x<tamanho-1;x++){
        
        //condicional para troca dos elementos
        if((*(p + x)).nrmatricula > (*(p + x + 1)).nrmatricula){
            
            // separa dados da struct
            aux.a = (*(p + x)).nrmatricula;
            strcpy(aux.b, (*(p + x)).nome);
            aux.c = (*(p+x)).salario;
            
            //ordena o menor elemnto da struct 
            (*(p + x)).nrmatricula = (*(p + x+1)).nrmatricula;
            strcpy((*(p + x)).nome, (*(p + x+1)).nome);
            (*(p+x)).salario = (*(p+x+1)).salario;
            
            //joga de volta o dado na struct
            (*(p + x)).nrmatricula = aux.a;
            strcpy((*(p + x)).nome, aux.b);
            (*(p+x)).salario = aux.c;
            
            y=x;
            
            while(y>0){

                if((*(p + y)).nrmatricula < (*(p + y - 1)).nrmatricula){
                    
                    aux.a = (*(p + y)).nrmatricula;
                    strcpy(aux.b, (*(p + y)).nome);
                    aux.c = (*(p+y)).salario;
            
                    (*(p + y)).nrmatricula = (*(p + y-1)).nrmatricula;
                    strcpy((*(p + x)).nome, (*(p + y-1)).nome);
                    (*(p+x)).salario = (*(p + y-1)).salario;
            
                    (*(p + y -1)).nrmatricula = aux.a;
                    strcpy((*(p + y-1)).nome, aux.b);
                    (*(p + y-1)).salario = aux.c;
            
                    y--;
                }
                else
                    break;
            }
        }
    }
    
    
}

int pesquisaBinaria(struct funcionario *p, int inicio, int fim, int busca){
    int meio;
    
    if(inicio>fim)
        {return -1;} 
    
    meio = (inicio + fim) / 2;
    
    if( (*(p+meio)).nrmatricula > busca){
        return( p,inicio, meio - 1, busca);
    }
    else if( (*(p+meio)).nrmatricula < busca){
        return pesquisaBinaria(p, meio + 1, fim, busca);
    }
    else{//se não é nem maior nem menor logo foi encontrado o cadastro 
        return meio;
    }
}

 

Pesquisa.txt

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Achei esses erros:

int n, busca;
 ///funcCorp func[n]; qual o valor de n?
    
    
    printf("Quantos funcionarios tem na empresa?");
    scanf("%i", &n); //faltou o &
    funcCorp func[n]; //o valor de n agora esta determinado
    
    for(int x=0; x<n; x++){
        printf("\nnumero da matricula: ");
        scanf("%i", &func[x].nrmatricula);
        
        printf("\nnome: ");
        scanf("%s", func[x].nome); //faltou o .nome
        
        printf("\nsalario: ");
        scanf("%f", &func[x].salario);
        
    }

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...