Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max 20
typedef struct Data TipoData;
struct Data{
int dia;
int mes;
int ano;
};
struct Funcionario{
int matricula;
char nome[30];
char estadoCivil[9];
char endereco[40];
char cargo[30];
float salario;
int cont;
TipoData nascimento;
}Cadastro[max];
void inicia_lista(void), enter(void);
void delete(void), lista(void);
void altera(void);
int menu(void), procurar(void); char escolha;
inicia_lista(); // Inicializa a estrutura
for(; ;){
escolha = menu();
switch (escolha) {
case 1: enter();break;
case 2: delete();break;
case 3: lista();break;
case 4: altera();break;
case 5: busca();break;
case 6: exit(0);break;
}
}
}
void inicia_lista(void){
register int t;
for (t = 0; t < max; ++t) Cadastro[t].nome[0] = '\0';
}
int menu(void){
char s[80];
int c;
fflush(stdin);
printf("\n(1)- Cadastrar");
printf("\n(2)- Excluir");
printf("\n(3)- Listar");
printf("\n(4)- Alterar");
printf("\n(5)- Procurar");
printf("\n(6)- Sair");
do {
printf("\n > ");
fflush(stdout);
gets(s);
c = atoi(s);
} while (c < 0 || c > 5);
return c;
}
// Verifica se o vetor está cheio senão faz o cadastro
void enter(void){
int Cad;
Cad = procurar();
if (Cad == -1) {
printf("\nO vetor está cheio!\n");
return;
}
// Inicio do cadastro
fflush(stdin);
printf("\nInforme a matricula do funcionário: ");
fflush(stdout);
scanf("%d",&Cadastro[Cad].matricula);
fflush(stdin);
printf("\nDigite o nome do funcionario: ");
fflush(stdout);
gets(Cadastro[Cad].nome);
printf("\nData de Nascimento: ");
fflush(stdout);
scanf("%d %d %d",&Cadastro[Cad].nascimento.dia, &Cadastro[Cad].nascimento.mes, &Cadastro[Cad].nascimento.ano);
fflush(stdin);
printf("\nEstado civil do funcionário: ");
fflush(stdout);
gets(Cadastro[Cad].estadoCivil);
fflush(stdin);
printf("\nEndereco do funcionário: ");
fflush(stdout);
gets(Cadastro[Cad].endereco);
fflush(stdin);
printf("\nCargo do funcionário: ");
fflush(stdout);
gets(Cadastro[Cad].cargo);
fflush(stdin);
printf("\nSalário: ");
fflush(stdout);
scanf("%f",&Cadastro[Cad].salario);
} // Fim do cadastro
// Encontra uma estrutura não usada
int procurar(void){
register int t;
for (t = 0; Cadastro[t].nome[0] && t < max; ++t);
if (t == max) return -1; // nenhum elemento livre
return t;
}
// Pede o endereco do vetor onde se encontra o cadastro p/ exclusão register int converte;
char s[80];
printf("\nDigite o endereço do funcionário que deseja excluir: ");
fflush(stdout);
gets(s);
converte = atoi(s); // converte s em num int
if (converte >= 0 && converte < max)
Cadastro[converte].nome[0] = '\0';
}
void lista(void){
register int t;
for (t = 0; t < max; ++t) {
if (Cadastro[t].nome[0]) {
printf("\nMatricula: %d",Cadastro[t].matricula);
printf("\nNome: %s",Cadastro[t].nome);
printf("\nData de Nascimento: %d/%d/%d",Cadastro[t].nascimento.dia, Cadastro[t].nascimento.mes, Cadastro[t].nascimento.ano);
printf("\nEstado Civil: %s",Cadastro[t].estadoCivil);
printf("\nEndereço: %s",Cadastro[t].endereco);
printf("\nCargo: %s",Cadastro[t].cargo);
printf("\nSalário: %.2f",Cadastro[t].salario);
printf("\nEndereço para exclusão: %d",t);
printf("\n\n");
}
}
}
void altera(void){
register int t;
char s[80];
printf("\nDigite a posição do funcionario para alterar: ");
fflush(stdout);
gets(s);
t = atoi(s);
printf("\n\t\tDADOS DO FUNCIONÁRIO");
// Altera matricula
fflush(stdin);
printf("\nMatricula Atual: %d",Cadastro[t].matricula);
fflush(stdin);
printf("\nAlterar para: ");
fflush(stdout);
scanf("%d",&Cadastro[t].matricula);
printf("\nMatricula alterada para: %d",Cadastro[t].matricula);
//fim altera matricula
printf("\n");
fflush(stdin);
//Altera Nome
printf("\nNome Atual: %s",Cadastro[t].nome);
printf("\nAlterar para: ");
fflush(stdout);
gets(Cadastro[t].nome);
printf("\nNome alterado para: %s",Cadastro[t].nome);
//Fim Altera Nome
printf("\n");
//Altera Data
printf("\nData de Nascimento Atual: %d/%d/%d",Cadastro[t].nascimento.dia, Cadastro[t].nascimento.mes, Cadastro[t].nascimento.ano);
printf("\nAlterar para: ");
fflush(stdout);
scanf("%d %d %d",&Cadastro[t].nascimento.dia, &Cadastro[t].nascimento.mes, &Cadastro[t].nascimento.ano);
printf("\nData de Nascimento alterada para %d/%d/%d",Cadastro[t].nascimento.dia, Cadastro[t].nascimento.mes,
Cadastro[t].nascimento.ano);
// Fim altera Data
printf("\n");
fflush(stdin);
//Altera Estado Civil
printf("\nEstado Civil Atual: %s",Cadastro[t].estadoCivil);
fflush(stdin);
printf("\nAlterar para: ");
fflush(stdout);
gets(Cadastro[t].estadoCivil);
printf("\nEstado Civil alterado para: %s",Cadastro[t].estadoCivil);
//Fim Altera Estado Civil
printf("\n");
fflush(stdin);
//Altera Endereco
printf("\nEndereço Atual: %s",Cadastro[t].endereco);
printf("\nAlterar para: ");
fflush(stdout);
gets(Cadastro[t].endereco);
printf("\nEndereco alterado para: %s",Cadastro[t].endereco);
//Fim altera endereco
printf("\n");
fflush(stdin);
//Altera Cargo
printf("\nCargo Atual: %s",Cadastro[t].cargo);
printf("\nAlterar para: ");
fflush(stdout);
gets(Cadastro[t].cargo);
printf("\nCargo alterado para: %s",Cadastro[t].cargo);
//Fim Altera Cargo
printf("\n");
fflush(stdin);
//Altera Salario
printf("\nSalário Atual: %.2f",Cadastro[t].salario);
printf("\nAlterar para: ");
fflush(stdout);
scanf("%f",&Cadastro[t].salario);
printf("\nSalário alterado para: %.2f",Cadastro[t].salario);
//Fim Altera Salario
printf("\n");
printf("\nEndereço para exclusão: %d",t);
printf("\n\n");
return t;
}
int busca(void){
char s[80];
register int t;
int achou = 0;
printf("\nDigite o nome: ");
fflush(stdout);
gets(s);
for (t = 0; t <= 1; t++) {
if (Cadastro[t].nome[0]) {
printf("\nNome: %s",Cadastro[t].nome);
}
}
return t;
}E então...O que vc quer com isso?
Já te digo pra tirar o fflush(stdin) e o gets daí.
Sugiro que utilize a tag CODE, quando for postar códigos. Facilita no entendimento do mesmo.