Olá, estou com problemas para chamar a função. Insiro os dados pedidos, e quando o programa pergunta a ID para que eu possa imprimir os dados do usuário inserido, ele devolve, no entanto, apenas do segundo usuário! E ainda não imprime o número de engenheiros e engenheiros junior que foram inseridos e que as funções int Imprime_numero_ENG(TLISTA l) e Imprime_Lista_eng_salarios(l) (respectivamente), deveriam retornar na função main. Como devo proceder?
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 2
#define SUCESSO 2
#define FALTA_DE_MEMORIA 1
#define LISTA_VAZIA 3
typedef struct {
char nome [50];
int idade;
float salario;
char cargo [30];
char cargo2 [30];
int Id;
}TDADOS;
typedef struct nodo {TDADOS dado;
struct nodo *elo;
}TNODO;
typedef struct {TNODO *primeiro;
}TLISTA;
//=======protótipos===================//
void Cria_Lista(TLISTA *l);
int Inclui_Lista(TLISTA *l, TDADOS d);
int Conta_Elementos(TLISTA l);
void Imprime_Erro(int erro);
void Destroi_Lista(TLISTA *l);
int Imprime_Lista(TLISTA l);
int Imprime_numero_ENG(TLISTA l);
int Imprime_Lista_ID(TLISTA l, int Id);
int Imprime_Lista_eng_salarios(TLISTA l);
//===================================//
void Cria_Lista(TLISTA *l)
{
l->primeiro = NULL;
}
int Inclui_Lista(TLISTA *l, TDADOS d)
{
TNODO *p;
p = (TNODO*)malloc(sizeof(TNODO));
if (p==NULL)
return(FALTA_DE_MEMORIA);
else
{
if(l->primeiro == NULL)
{
l->primeiro = p;
p->dado = d;
p->elo = NULL;
}
else
{
p->dado = d;
p->elo = l->primeiro;
l->primeiro = p;
}
return(SUCESSO);
}
}
int Conta_Elementos(TLISTA l)
{
TNODO *p;
int n = 0;
if (l.primeiro == NULL)
return(n);
else
{
p = l.primeiro;
while(p != NULL)
{
n++;
p = p->elo;
}
return(n);
}
}
int Imprime_Lista(TLISTA l)
{
TNODO *p;
if(l.primeiro == NULL)
return(LISTA_VAZIA);
else
{
printf("Lista Encadeada: ");
p = l.primeiro;
while(p != NULL)
{
printf("Nome: %s\n", p->dado.nome);
printf("Idade: %d\n", p->dado.idade);
printf("Salario: %.2f\n", p->dado.salario);
printf("Cargo: %s %s\n", p->dado.cargo,p->dado.cargo2);
printf("ID: %d\n", p->dado.Id);
p = p->elo;
}
}
//getchar();
}
int Imprime_Lista_ID(TLISTA l, int Id)
{
TNODO *p;
if(l.primeiro == NULL)
return(LISTA_VAZIA);
else
{
//printf("Lista Encadeada: ");
p = l.primeiro;
while(p != NULL)
{
if(p->dado.Id == Id){
printf("Nome: %s\n", p->dado.nome);
printf("Idade: %d\n", p->dado.idade);
printf("Salario: %.2f\n", p->dado.salario);
printf("Cargo: %s\n", p->dado.cargo,p->dado.cargo2);
p = p->elo;
}
}
}
//getchar();
}
int Imprime_Lista_eng_salarios(TLISTA l)
{
int numero =0;
int cont =0;
char *str2 = "junior";
char *str1 = "engenheiro";
TNODO *p;
if(l.primeiro == NULL)
return(LISTA_VAZIA);
else
{
p = l.primeiro;
while(p != NULL)
{
if(p->dado.salario < 2500 && strncmp(str1, p->dado.cargo, 10) == 0 && strncmp(str2, p->dado.cargo2, 6) == 0){
numero++;
p = p->elo;
}
if(cont == 1000){
p = NULL;
}
}
printf("Numero de engenheiros Junior: %d\n",numero);
}
//getchar();
}
int Imprime_numero_ENG(TLISTA l)
{
int numero = 0;
int cont = 0;
char *str1 = "engenheiro";
TNODO *p;
if(l.primeiro == NULL)
return(LISTA_VAZIA);
else
{
p = l.primeiro;
while(p != NULL)
{
cont++;
if(strncmp(str1, p->dado.cargo, 10) == 0){
numero++;
p = p->elo;
}
if(cont == 1000){
p = NULL;
}
}
printf("Numero de engenheiros eh: %d\n", numero);
}
//getchar();
}
void Destroi_Lista(TLISTA *l)
{
TNODO *p;
if(l->primeiro != NULL)
{
p = l->primeiro;
while(p != NULL)
{
l->primeiro = p->elo;
free(p);
p = l->primeiro;
}
}
}
void Imprime_Erro(int erro)
{
switch(erro)
{
case FALTA_DE_MEMORIA: printf("ERRO: Falta de Memoria\n");
break;
case LISTA_VAZIA: printf("ERRO: Lista Vazia\n");
break;
}
//getchar();
}
int main(){
TLISTA l;
TDADOS proximo_ponto; // é o "d" do exemplo
TNODO *p;
int n,erro,Id;
char resp;
int imprimeid;
char op1, op2, op3, op4;
char *str1 = "engenheiro";
p = l.primeiro;
Cria_Lista(&l);
for(int i=0; i<MAX; i++)
{
printf("Digite seu nome: \n");
scanf("%s", &proximo_ponto.nome);
printf("Digite sua idade:\n");
scanf("%d", &proximo_ponto.idade);
printf("Digite seu salario:\n");
scanf("%f", &proximo_ponto.salario);
printf("Digite seu cargo:\n");
scanf("%s", &proximo_ponto.cargo);
if(strncmp(str1, proximo_ponto.cargo, 10) == 0){
printf("Eh engenheiro Junior? s ou n?\n");
scanf(" %c", &op3);
if(op3 == 's'){
printf("Digite junior\n");
scanf("%s",&proximo_ponto.cargo2);
}
}
printf("Digite a ID: \n");
scanf("%d", &proximo_ponto.Id);
Inclui_Lista(&l, proximo_ponto);
}
printf("Digite a ID do funcionario:\n");
scanf("%d", &imprimeid);
Imprime_Lista_ID(l,imprimeid);
printf("Deseja saber quantos funcionarios sao engenheiros s ou n?\n");
scanf(" %c", &op1);
if(op1 == 's'){
Imprime_numero_ENG(l);
}
printf("Deseja saber quantos funcionarios sao engenheiros junior? s ou n?\n");
scanf(" %c", &op4);
if(op4 == 's'){
Imprime_Lista_eng_salarios(l);
}
//erro = Imprime_Lista(l);
//getchar();
return(0);
}