-2
I’m having difficulty implementing the logic of introducing new employees in the code below. When determining the new quantity and reallocating the vector based on it, the first new employee is showing up with the advanced or delayed position or the program is ending
#include <stdio.h>
#include <stdlib.h>
typedef struct {
char *nome;
char *email;
int idade;
} Funcionario;
int main() {
int i, opcao, qtdeInicialFuncionarios, novaQtdeFuncionarios;
printf("Quantos funcionarios deseja cadastrar? ");
scanf("%d", &qtdeInicialFuncionarios);
Funcionario *funcionarios = malloc(qtdeInicialFuncionarios* sizeof(Funcionario));
for ( i = 0; i < qtdeInicialFuncionarios; i++) {
funcionarios[i].nome = malloc(35);
printf("\nDigite o nome do funcionario %d: ", i);
scanf("%34s", funcionarios[i].nome);
printf("\n%s", funcionarios[i].nome);
funcionarios[i].email = malloc(35);
printf("\nDigite o email do funcionario %d: ", i);
scanf("%34s", funcionarios[i].email);
printf("\n%s", funcionarios[i].email);
printf("\nDigite a idade do funcionario %d: ", i);
scanf("%d", &funcionarios[i].idade);
printf("\n%d", funcionarios[i].idade);
}
while(1){
printf("1.Cadastrar mais funcionarios\n");
printf("2.Listar funcionarios\n");
printf("3.Editar dados de funcionario\n");
printf("4.Excluir funcionario\n");
scanf("%d", &opcao);
if (opcao == 1) {
printf("Deseja cadastrar mais quantos funcionarios? ");
scanf("%d", &novaQtdeFuncionarios);
funcionarios = (Funcionario*)realloc(funcionarios, novaQtdeFuncionarios* sizeof(Funcionario));
for ( i = qtdeInicialFuncionarios ; i <= novaQtdeFuncionarios ; i++) {
funcionarios[i].nome = malloc(35);
printf("\nDigite o nome do funcionario %d: ", i);
scanf("%34s", funcionarios[i].nome);
printf("\n%s", funcionarios[i].nome);
funcionarios[i].email = malloc(35);
printf("\nDigite o email do funcionario %d: ", i);
scanf("%34s", funcionarios[i].email);
printf("\n%s", funcionarios[i].email);
printf("\nDigite a idade do funcionario %d: ", i);
scanf("%d", &funcionarios[i].idade);
printf("\n%d", funcionarios[i].idade);
}
qtdeInicialFuncionarios = (qtdeInicialFuncionarios + novaQtdeFuncionarios)-1;
}
else if(opcao == 3){
printf("Digite o numero do funcionario que deseja editar: ");
int numero;
scanf("%d", &numero);
printf("Digite o novo nome do funcionario %d: ", numero);
scanf("%34s", funcionarios[numero].nome);
printf("Digite o novo email do funcionario %d: ", numero);
scanf("%34s", funcionarios[numero].email);
printf("Digite a nova idade do funcionario %d: ", numero);
scanf("%d\n", &funcionarios[numero].idade);
}
}
return 0;
}
That is the statement:
From what I understand if you want to register more x employees then that reallocate memory "adding" more x positions to your already allocated area and not as you did where you just realoca x positions without considering what has already been previously allocated.
– anonimo
Did the answer solve your question? Do you think you can accept it? See [tour] if you don’t know how you do it. This would help a lot to indicate that the solution was useful for you. You can also vote on any question or answer you find useful on the entire site (when you have 15 points).
– Maniero