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;
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>
#include <string.h>
#define MAXNOME 100
typedef struct {
char nome[MAXNOME];
int idade;
char sexo;
int tempo;
int departamento;
float salario;
} Func;
char nome[MAXNOME];
int idade;
char sexo;
int tempo;
int departamento;
float salario;
} Func;
int main() {
int n, i, found = 0;
char target[MAXNOME];
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;
}