Ir ao conteúdo

Posts recomendados

Postado

Olá colegas!

Estou com problemas ao cadastrar um funcionário com o código seguinte.

O salário não está sendo armazenado corretamente.

 

Spoiler

 


#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <iostream>

using namespace std;

//Estruturas
struct nascData
{
	int dia;
	int mes;
	int ano;
};

struct Funcionario
{
	char nome[35];
	char cargo[15];
	float salario[15];
	int CPF;
	int matricula;
	nascData data_nascimento;
};

//Protótipos das funções
int menu();
void cadastrarFuncionario(Funcionario M[], int, int);
int imprimirMatricula(int, Funcionario V[]);
void imprimirCadastros(Funcionario M[], int);
void linhas_sinais();

//Função principal
int main()
{
	menu();
}

//Dev Funções
void linhas_sinais()
{
	int i;
	for(i = 0; i < 50; i++)
	{
		printf("#");
	};
	printf("\n");

}

int menu()
{
	//Declaração das variaveis
	int op_usr, matr, matricula = 0;
	Funcionario tCad[50];//Total de Cadastros
	int nCad = 0;//Qnt de cadastros
	//Funcionario Func;

	do
	{
		printf("---- MENU ----\n");
		linhas_sinais();
		printf("1--> Cadastrar Funcionario.\n");
		printf("2--> Acessar dados por matricula.\n");
		printf("3--> Acessar todos os cadastros.\n0--> SAIR.\n");
		linhas_sinais();
		printf("--> ");
		scanf("%i", &op_usr);
		fflush(stdin);
		system("cls");

		//Avaliar escolha
		switch(op_usr)
		{
		case 1:
			matricula++;
			cadastrarFuncionario(tCad, nCad, matricula);
			nCad++;

			break;
		case 2:
			printf("Digite a matricula procurada: ");
			scanf("%i", &matr);
			fflush(stdin);
			system("cls");
			matr = imprimirMatricula(matr, tCad);
			if(matr < 0)
				printf("Matricula nao encontrada!\n");
			else
			{
				linhas_sinais();
				printf("Funcionario: %s\n Cargo: %s\n Salario: %f\n", tCad[matr].nome, tCad[matr].cargo, tCad[matr].salario);
				linhas_sinais();
			}

			break;
		case 3:
			if(nCad <= 0)
			{
				printf("Nao ha cadastros!\n");
			}
			else
			{
				imprimirCadastros(tCad, nCad);
			}

			break;
		case 0:
			printf("ENCERRADO!\n");
			system("pause");
			return 0;

			break;
		default:
			break;
		}

		system("pause");
		system("cls");
	}
	while(op_usr != 0);

}
//Vetor V do tipo Funcionario, n é a posição no vetor, matr é o nº de matricula
void cadastrarFuncionario(Funcionario V[], int n, int matr)
{
	Funcionario Gen;

	printf("Digite o nome do funcionario: ");
	scanf("%s", Gen.nome);
	fflush(stdin);
	printf("Digite o cargo do funcionario %s: ", Gen.nome);
	scanf("%s", Gen.cargo);
	fflush(stdin);
	printf(" Salario: ");
	scanf("%f",&Gen.salario);
	fflush(stdin);
	printf("\n-->%f\n",Gen.salario);
	fflush(stdin);
	printf(" CPF: ");
	scanf("%i", &Gen.CPF);
	fflush(stdin);
	printf(" Digite a data de nascimento:\n");
	printf("  Dia: ");
	scanf("%i", &Gen.data_nascimento.dia);
	fflush(stdin);
	printf("  Mes: ");
	scanf("%i", &Gen.data_nascimento.mes);
	fflush(stdin);
	printf("  Ano: ");
	scanf("%i", &Gen.data_nascimento.ano);
	fflush(stdin);
	Gen.matricula = matr;

	V[n] = Gen;

	linhas_sinais();
	printf("\nCADASTRO EFETUADO!\n");
	linhas_sinais();

}

void imprimirCadastros(Funcionario V[], int n)
{
	int i;
	printf("------  FUNCIONARIOS  ------\n");
	for(i = 0; i < n; i++)
	{
		printf("|%i|\nNome: %s\nMatricula: %i\n\n", i + 1, V[i].nome, V[i].matricula);
	}
}

int imprimirMatricula(int matr, Funcionario V[])
{
	int i;
	for(i = 0; i < sizeof(V); i++)
		if(matr == V[i].matricula)
			return i;
		else
		{
			return -1;
		}

}

 

Postado

Olá, tudo bem?

 

 

Então, olhe mais uma vez o estrutura e o seu campo em funcionário.

57 minutos atrás, saulogoiana disse:

struct Funcionario
{
	char nome[35];
	char cargo[15];
	float salario[15];
	int CPF;
	int matricula;
	nascData data_nascimento;
};

[ !!! ] A campo em funcionário é um vetor!

 

Continue olhando e comparando agora em suas ocorrências na função

57 minutos atrás, saulogoiana disse:

printf(" Salario: ");
scanf("%f",&Gen.salario);

[ !!! ] No campo salário, por compreensão, sabemos que está gravando na primeira posição do vetor, pois a primeira posição é a referência (o nome do arranjo).

 

57 minutos atrás, saulogoiana disse:

printf("\n-->%f\n",Gen.salario);
fflush(stdin);

[ !!! ] Aqui com já discutido, a primeira posição é a referência e o nome do arranjo, o que se imprime é justamente o número da referencia do vetor e não o valor nele (no caso, a melhor interpretação é o valor na primeira posição). 

 

Por tudo isso, uma correção depende é, o campo salário ser um arranjo ou uma variável.

 

 

OK!? Tchau.

  • Curtir 1
  • Obrigado 1

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!