Uma empresa de informática comercializa um programa para gerenciar o cadastro de informações dos funcionários de empresas. Uma determinada empresa, com 8 departamentos, adquiriu o programa e, ao executar o programa pela primeira vez, informou o número de funcionários e as informações de cada funcionário. As informações armazenadas são nome (cadeia de caracteres), idade (inteiro), sexo (caractere), tempo de casa, em anos (inteiro), departamento (inteiro) e salário (em reais). Escreva um programa em C para realizar as seguintes operações:
a. Procurar no cadastro e informar todos os dados do funcionário com nome informado pelo usuário;

Passo 1

A questão pede um programa em C que armazene informações de vários funcionários (nome, idade, sexo, tempo de casa, departamento e salário) e, a partir de um nome informado, mostre todos os dados daquele funcionário. O conteúdo envolvido é: struct para agrupar campos heterogêneos, vetor de struct para armazenar vários funcionários, funções de string (fgets, strcmp, strcspn) e laços de repetição para leitura e busca.

Passo 2

Primeiro, definimos uma struct chamada Func que contém um array de caracteres para o nome (para guardar a cadeia de caracteres), inteiros para idade, tempo de casa e departamento, um char para o sexo e um float para salário. Incluímos <string.h> para podermos usar strcmp (comparar strings) e strcspn (remover o ‘\n’ que o fgets deixa).

Passo 3

Em seguida, no main() lemos o número de funcionários (n) com scanf. Criamos um vetor Func v[n] para armazenar os dados de cada funcionário. Explicamos que usamos scanf("%d%*c",&n) e “%*c” para consumir o ‘\n’ que fica no buffer.

Passo 4

Depois, usamos um for de 0 até n-1 para ler os dados de cada funcionário. Para o nome, usamos fgets(v[i].nome, MAXNOME, stdin) e logo em seguida v[i].nome[strcspn(v[i].nome,"\n")] = ‘\0’ para tirar o newline. Para os outros campos (idade, sexo, tempo, departamento, salário) usamos scanf adequadamente e também consumimos o ‘\n’ após cada leitura.

Passo 5

Logo após preencher o vetor, pedimos ao usuário o nome a buscar. Também lemos com fgets em target e removemos o ‘\n’ com strcspn.

Passo 6

Para buscar, percorremos o vetor de funcionários e usamos strcmp(v[i].nome, target). Se der zero, encontramos o funcionário: imprimimos todos os campos formatados e marcamos uma flag found=1 para saber que achamos.

Passo 7

Por fim, se após o laço found continuar 0, exibimos uma mensagem de “Funcionário não encontrado.” Assim cobrimos todos os casos.

Passo 8

Abaixo está o código completo seguindo essa lógica.

Resposta

#include <stdio.h>
#include <string.h>
#define MAXNOME 100
typedef struct {
char nome[MAXNOME];
int idade;
char sexo;
int tempo;
int departamento;
float salario;
} Func;
int main() {
int n, i, found = 0;
char target[MAXNOME];
printf("Digite o numero de funcionarios: ");
scanf("%d%*c", &n);

Func v[n];

for (i = 0; i < n; i++) {
    printf("\nDados do funcionario %d:\n", i + 1);
    printf("Nome: ");
    fgets(v[i].nome, MAXNOME, stdin);
    v[i].nome[strcspn(v[i].nome, "\n")] = '\0';

    printf("Idade: ");
    scanf("%d%*c", &v[i].idade);

    printf("Sexo (M/F): ");
    scanf("%c%*c", &v[i].sexo);

    printf("Tempo de casa (anos): ");
    scanf("%d%*c", &v[i].tempo);

    printf("Departamento: ");
    scanf("%d%*c", &v[i].departamento);

    printf("Salario: ");
    scanf("%f%*c", &v[i].salario);
}

printf("\nDigite o nome a buscar: ");
fgets(target, MAXNOME, stdin);
target[strcspn(target, "\n")] = '\0';

for (i = 0; i < n; i++) {
    if (strcmp(v[i].nome, target) == 0) {
        printf("\nFuncionario encontrado:\n");
        printf("Nome: %s\n", v[i].nome);
        printf("Idade: %d\n", v[i].idade);
        printf("Sexo: %c\n", v[i].sexo);
        printf("Tempo de casa: %d anos\n", v[i].tempo);
        printf("Departamento: %d\n", v[i].departamento);
        printf("Salario: R$ %.2f\n", v[i].salario);
        found = 1;
        break;
    }
}

if (!found) {
    printf("\nFuncionario nao encontrado.\n");
}

return 0;
}

Exercícios relacionados