Ir ao conteúdo
  • Cadastre-se

O que ta dando errado nesse codigo?


Jinguitar

Posts recomendados

O programa é uma Lista simplesmente encadeada do qual possui as funcoes básicas de inclusao, exclusao consulta e alteracao, daí eu preciso tb de funcao que liste os funcionarios e os dados, a contagem deles, a média de seus salários e o maior dos salários, JÁ FIZ TUDO, só que quando é na hora de mostrar tudo relacionado a salario sai um numero maluco, e na hora de mostrar a quantidade de funcionarios também está assim...

Agradeço a quem tiver paciência de ler e mais ainda quem puder me ajudar!

um abraço!

#include <stdlib.h>
#include <string.h>
#include <iomanip.h>
// Tipo de cada elemento da LSE
struct LSE{
int m;
char n[200];
float s;
struct LSE *prox;
}*pra mim, *ult, *aux;

// Assinaturas das funções

void inclusao(int m, char s[100],float s);
void consulta(int m);
void alteracao(int m);
void exclusao(int m);
void ListarFunc();
int ContarFunc();
float MediaSalarios();
void FuncionarioMaiorSalario();



main()
{
int op=0, m,cont;
float s,med,mai;
char n[200];
pra mim=ult=NULL;
while(op!=9){
m=0;
cout<<"1-Inclusao\n";
cout<<"2-Consulta\n";
cout<<"3-Alteracao\n";
cout<<"4-Exclusao\n";
cout<<"5-Listar Funcionarios\n";
cout<<"6-Contagem de Funcionarios\n";
cout<<"7-Media de Salario\n";
cout<<"8-Maior Salario\n";
cin >> op;fflush(stdin);
if(op==1){
cout<<"Entre com a matricula:";
cin>>m;fflush(stdin);
cout<<"Entre com o nome:";
gets(n); fflush(stdin);
cout<<"Entre com o salario:";
cin>>s;fflush(stdin);
inclusao(m,n,s);
cout<<endl;
}
else if(op==2){
cout<<"Entre com o codigo para a colsulta:\n";
cin>>m; fflush(stdin);
consulta(m);
}
else if(op==3){
cout<<"Entre com o codigo para a Alteracao:\n";
cin>>m; fflush(stdin);
alteracao(m);
}
else if(op==4){
cout<<"Entre com o codigo para a exclusao:\n";
cin>>m; fflush(stdin);
exclusao(m);
}
else if(op==5){
fflush(stdin);
ListarFunc();

}
else if(op==6){
fflush(stdin);
ContarFunc();
cout<<"lista de funcionarios:"<<cont<<endl;
}
else if(op==7){
fflush(stdin);
MediaSalarios();
cout<<"Media de salarios:"<<med<<endl;
}
else if(op==8){
FuncionarioMaiorSalario();
cout<<"maior salario: "<<mai<<endl;
}

}
}

// Função de Inclusão

void inclusao(int m, char n[],float s)
{
aux = (struct LSE *) malloc(sizeof(struct LSE));
if(!pra mim)
pra mim=aux;
else
ult->prox=aux;
ult=aux;
ult->m=m;
strcpy(ult->n,n);
ult->prox=NULL;
cout<<"Inclusao realizada!\n";
}



// Função de Consulta
void consulta(int m)
{
int achei = 0;
aux=pra mim;
while(aux && !achei){
if(aux->m==m){
achei=1;
cout<<"Descricao:"<<aux->n<<"\n";
}
else aux=aux->prox;
}
if(!achei)
cout<<"Codigo inexistente!\n";
}

// Função de Alteração
void alteracao(int m)
{
int achei = 0;
aux=pra mim;
while(aux && !achei){
if(aux->m==m){
achei=1;
cout<<"Descricao atual:"<<aux->n<<"\n";
cout<<"Entre com a nova descricao:";
gets(aux->n);
cout<<"Alteracao realizada!\n";
}
else aux=aux->prox;
}
if(!achei)
cout<<"Codigo inexistente!\n";
}
// Função de Exclusão
void exclusao(int m)
{
int achei = 0;
aux=pra mim;
struct LSE *aux2;
while(aux && !achei){
if(aux->m==m){
if(aux==pra mim){
if(aux==ult)
pra mim=ult=NULL; //CASO 1
else pra mim=pra mim->prox; //CASO 2
}
else if(aux==ult){ //CASO 3
ult=aux2;
ult->prox=NULL;
}
else
aux2->prox = aux->prox; //CASO 4
achei=1;
free(aux);
cout<<"Exclusao realizada!\n";
}
else {
aux2=aux;
aux=aux->prox;
}
}
if(!achei)
cout<<"Codigo inexistente!\n";
}
//Função Listar funcionarios

void ListarFunc()
{
aux = pra mim;
while(aux) // o mesmo que while(aux!=NULL)
{
cout << "Matricula: "<< aux->m << "\n";
cout << "Nome: "<< aux->n << "\n";
cout << "Salario: "<< aux->s<<fixed << "\n"<<endl;
aux = aux->prox;
}
}

//Função Contagem de funcionarios

int ContarFunc()
{
int m=0;
aux = pra mim;
while(aux) // o mesmo que while(aux!=NULL)
{
m++;
aux = aux->prox;
}
return(m);
}

//Função Média de salarios

float MediaSalarios()
{
int m=0;
float s=0;
aux = pra mim;
while(aux) // o mesmo que while(aux!=NULL)
{
m++;
s+=aux->s;
aux = aux->prox;
}
if(m>0)
return(s/m);
else
return(-1);
}

//funcao Maior salario

void FuncionarioMaiorSalario()
{
int primeiro=1;
float maior;
char n[200];
aux = pra mim;
while(aux) // o mesmo que while(aux!=NULL)
{
if(primeiro) // o mesmo que if(primeiro==1)
{
maior=aux->s;
strcpy(n, aux->n);
primeiro =0;
}
else if(aux->s>maior)
{
maior=aux->s;
strcpy(n, aux->n);
}
aux = aux->prox;
}
cout << "Funcionario de maior salário:"<<n;
}

Link para o comentário
Compartilhar em outros sites

Você declarou med e mai:

float s,med,mai;

Mais em nenhum momento atribui valores pra eles, está simplesmente imprimindo essas variaveis.

As funções deviam retornar valores, e você receber esses valores na 'med' e 'mai'

Link para o comentário
Compartilhar em outros sites

Exatamente como o WhiteDog disse, você não atribuiu valores as variáveis. Então você acaba as imprimindo "sujas" por valores alocados naquele espaço de memória destinado a variável.

Diferente do java, o c++ não limpa automaticamente as variáveis declaradas. Então por isso acaba saindo esses valores "malucos".

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...