Olá!
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