Ir ao conteúdo

Posts recomendados

Postado
#include <stdio.h>
#include <stdlib.h>

struct funcionario { //cria a struct funcionario 
	char nome[50]; //cria a variável nome 
	float salario; //cria a variável salario
};

typedef struct funcionario funcionario_t; 

void cadastra_funcionario ()
{
	//função que cadastra um novo funcionário
	funcionario_t lista_funcionarios[50];
	funcionario_t novo_funcionario;
	int tamanho_lista = 0;
	printf("Informe o nome do funcionario \n");
	scanf("\n%s", &novo_funcionario.nome);
	printf("Informe o salario do funcionario \n");
	scanf("\n%f", &novo_funcionario.salario);
	lista_funcionarios[tamanho_lista] = novo_funcionario;
	tamanho_lista++;
	//fim da função que cadastra um novo funcionário
}

funcionario_t maior_salario(funcionario_t lista_funcionarios[], int tamanho_lista)
{
	//função que encontra o funcionário com maior salário
	//int tamanho_lista = 0;
	if (tamanho_lista > 0) {
					int i, maior_indice;
					float maior_salario = 0;
					for (i = 0; i < tamanho_lista; i++) {
						if (lista_funcionarios[i].salario > maior_salario) {
					maior_salario = lista_funcionarios[i].salario;
					maior_indice = i;
				}
			printf("Nome: %s\n", lista_funcionarios[maior_indice]);
			printf("Maior salario: %f\n", maior_salario);
			}
	}
	//fim da função que encontra o funcionário com maior salário
}

int main(void) //função responsável por perguntar ao usuário se deseja cadastrar funciOnário ou saber o maior salário
{
	funcionario_t lista_funcionarios[50];
	int tamanho_lista = 0;
	int continuar = 1;
	char opcao;
	do {
		printf ("Digite C para cadastrar ou M  para saber o maior salario \n");
		scanf("\n\n%c", &opcao);
		switch (opcao) {
			case 'C':
				cadastra_funcionario(lista_funcionarios, tamanho_lista);
				tamanho_lista++;
				break;
			case 'M':
				maior_salario(lista_funcionarios, tamanho_lista);
				break;
			default:
				continuar = 0;
		}
	} while (continuar ==1); {
	//fim da função responsável por perguntar ao usuário se deseja cadastrar funcionário ou saber o maior salário
	system("pause");
	return 0;
	}
}

Boa noite, tentei criar um programa que cadastra funcionários e seus respectivos salários. Este se utiliza de 3 funções: main, cadastra_funcionario e maior_salario, acontece que quando o usuário solicita o maior salário, O PROGRAMA retorna (através do printf) o nome e o salário de todos os cadastrados e sem nenhum valor. outra coisa é que o programa só aceita como dado de entrada 'C' ou 'M' em maiúsculas para cadastrar ou saber o maior salário. Já quebrei a cabeça e nada, alguém poderia me ajudar?   

 

  • Curtir 1
Postado

Código fixado:

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>         // Uso da função toupper

struct funcionario { //cria a struct funcionario 
    char nome[50]; //cria a variável nome 
    float salario; //cria a variável salario
};

funcionario lista_funcionarios[50]; // Precisa ser definida como global ou ser definida dentro da função main e passar ela como argumento para as outras funções

void cadastra_funcionario (int& tamanho_lista)
{
    //função que cadastra um novo funcionário
    printf("Informe o nome do funcionario \n");
    scanf("\n%s", &lista_funcionarios[tamanho_lista].nome);
    
    printf("Informe o salario do funcionario \n");
    scanf("\n%f", &lista_funcionarios[tamanho_lista].salario);
    tamanho_lista++;
    //fim da função que cadastra um novo funcionário
}

funcionario maior_salario(funcionario lista_funcionarios[], int tamanho_lista)
{
    //função que encontra o funcionário com maior salário
    //int tamanho_lista = 0;
    if (tamanho_lista > 0) 
    {
        int i, maior_indice;
        float maior_salario;
        for (i = 0; i < tamanho_lista; i++) 
        {
            if (lista_funcionarios[i].salario > maior_salario) 
            {
                maior_salario = lista_funcionarios[i].salario;
                maior_indice = i;
            }
        }
        printf("Nome: %s\n", lista_funcionarios[maior_indice].nome);
    	printf("Maior salario: %f\n", maior_salario);
    }
    //fim da função que encontra o funcionário com maior salário
}

int main(void) //função responsável por perguntar ao usuário se deseja cadastrar funciOnário ou saber o maior salário
{
    int tamanho_lista = 0;
    int continuar = 1;
    char opcao;
    do {
        printf ("Digite C para cadastrar ou M  para saber o maior salario \n");
        scanf("\n\n%c", &opcao);
        opcao = toupper(opcao); // A linguagem C é uma linguagem case sensitive, então precisa converter para maiusculo nesse caso
        switch (opcao) {
            case 'C':
                cadastra_funcionario(tamanho_lista);
                break;
            case 'M':
                maior_salario(lista_funcionarios, tamanho_lista);
                break;
            default:
                continuar = 0;
        }
    } while (continuar ==1); {
    //fim da função responsável por perguntar ao usuário se deseja cadastrar funcionário ou saber o maior salário
    system("pause");
    return 0;
    }
}

 

  • Curtir 1
Postado
Em 08/01/2018 às 23:32, cyer disse:

Código fixado:


#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>         // Uso da função toupper

struct funcionario { //cria a struct funcionario 
    char nome[50]; //cria a variável nome 
    float salario; //cria a variável salario
};

funcionario lista_funcionarios[50]; // Precisa ser definida como global ou ser definida dentro da função main e passar ela como argumento para as outras funções

void cadastra_funcionario (int& tamanho_lista)
{
    //função que cadastra um novo funcionário
    printf("Informe o nome do funcionario \n");
    scanf("\n%s", &lista_funcionarios[tamanho_lista].nome);
    
    printf("Informe o salario do funcionario \n");
    scanf("\n%f", &lista_funcionarios[tamanho_lista].salario);
    tamanho_lista++;
    //fim da função que cadastra um novo funcionário
}

funcionario maior_salario(funcionario lista_funcionarios[], int tamanho_lista)
{
    //função que encontra o funcionário com maior salário
    //int tamanho_lista = 0;
    if (tamanho_lista > 0) 
    {
        int i, maior_indice;
        float maior_salario;
        for (i = 0; i < tamanho_lista; i++) 
        {
            if (lista_funcionarios[i].salario > maior_salario) 
            {
                maior_salario = lista_funcionarios[i].salario;
                maior_indice = i;
            }
        }
        printf("Nome: %s\n", lista_funcionarios[maior_indice].nome);
    	printf("Maior salario: %f\n", maior_salario);
    }
    //fim da função que encontra o funcionário com maior salário
}

int main(void) //função responsável por perguntar ao usuário se deseja cadastrar funciOnário ou saber o maior salário
{
    int tamanho_lista = 0;
    int continuar = 1;
    char opcao;
    do {
        printf ("Digite C para cadastrar ou M  para saber o maior salario \n");
        scanf("\n\n%c", &opcao);
        opcao = toupper(opcao); // A linguagem C é uma linguagem case sensitive, então precisa converter para maiusculo nesse caso
        switch (opcao) {
            case 'C':
                cadastra_funcionario(tamanho_lista);
                break;
            case 'M':
                maior_salario(lista_funcionarios, tamanho_lista);
                break;
            default:
                continuar = 0;
        }
    } while (continuar ==1); {
    //fim da função responsável por perguntar ao usuário se deseja cadastrar funcionário ou saber o maior salário
    system("pause");
    return 0;
    }
}

 

muito obrigado

adicionado 8 minutos depois

@cyer muito obrigado.

adicionado 21 minutos depois

@vangodp muito obrigado. Não conhecia essa biblioteca: #include <ctype.h>.

Minha dúvida é:

    printf("Informe o nome do funcionario \n");
    scanf("%s[^\n]%*c", lista_funcionarios[*tamanho_lista].nome);

    printf("Informe o salario do funcionario \n");
    scanf("%f%*c", &lista_funcionarios[*tamanho_lista].salario);

1. Porque o segundo scanf armazena o salário do funcionário (através do &) e o primeiro scanf não?

2. qual o objetivo  do primeiro comando scanf percorrer os caracteres ([^\n])?

3. qual o objetivo do getchar() no final do programa?

Fico muito grato se puder esclarecer-me essas dúvidas, tenho outras dificuldades, mas acredito que é por estar tendo os primeiro contatos e logo logo serão sanadas...

 

 

  • 9 meses depois...

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!