Enviado em 07/09/2015 - 12:02h
Estou com uma dúvida a respeito de um problema que eu tenho q fazer uma leitura de dados, mas os vetores que serão usadas nas funções só poderão ser passados por referencia através de ponteiros. Acredito eu que esteja fazendo algo muito errado porque o meu DEV c++ quando inicio a compilação e execução do programa ele da não respondendo e fecha. Segue o código:// Aluno : Fernando Henrique Antero de Moraes
/*
Síntese
Objetivo: Auxilar o usuário no controle de salarios de empregados numa empresa.
Entrada : Quantidade de funcionários, matricula e salário de cada funcionario
Saída :Apresentação em uma tabela dos dados lidos, maior e menor salario
*/
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <locale.h>
#define MAX_FUNC 500
#define MIN_FUNC 1
#define MAX_SAL
#define MIN_SAL
///////////////////// Protótipos////////////////////////////////////////////////
void leValidaQuantidade(int *qtde, int max, int min, char *titulo);
int leValidaInt(char *titulo);
int verificaRepetido(int *matriculas, int ultimoLido);
void leValidaMatriculas(int *matricula, char *titulo, int aux);
void leValidaSalario(float *ptrSalarios,int min,int max, char *titulo, int cont);
float leValidaFloat(char *titulo);
////////////////////////////////////////////////////////////////////////////////
int main(void)
{
setlocale(LC_ALL, "Portuguese");
// Declaracoes
int *ptrQtde;
char titulo[100];
int matriculas[MAX_FUNC];
int *ptrMatriculas=matriculas;
int aux;
int validacao;
float salarios[MAX_FUNC];
float *ptrSalarios=salarios;
// Instrucoes
leValidaQuantidade(ptrQtde, MAX_FUNC, MIN_FUNC, "Informe uma quantidade de funcionários:");
for(aux=0;aux< *ptrQtde;aux++){
do{
leValidaMatriculas(ptrMatriculas, "Por favor informe sua matricula:", aux);
validacao=verificaRepetido(ptrMatriculas, aux);
if(validacao==1){
printf("Matricula repetida, informe novamente!!!");
getch();
system("CLS");
}
}while(validacao==1);
leValidaSalario(&ptrSalarios, MIN_SAL, MAX_SAL, "Informe um salario:", aux );
}
getch();
return 0;
}
// SubAlgoritmo
// Objetivo: ler e validar uma quantidade de funcionarios, quantidade maxima de funcionarios e quantidade minima, referencia ao vetor de titulos
// Parâmetros: refencia ao endereço de memoria do ponteiro de quantidade de funcionarios
// Retorna: sem retorno
void leValidaQuantidade(int *qtde, int max, int min, char *titulo)
{
do
{
*qtde = leValidaInt(titulo);
if(*qtde < min || *qtde > max)
{
printf("ERRO, quantidade inválida, informe novamente: 1....500");
getch();
system("cls");
}
}while(*qtde < min || *qtde > max);
}
// SubAlgoritmo
// Objetivo: ler e validar um numero inteiro
// Parâmetros: referncia ao vetor de titulos
// Retorna: numero inteiro valido
int leValidaInt(char *titulo)
{
int ret, numero;
do{
printf(titulo);
fflush(stdin);
ret=scanf("%d",&numero);
fflush(stdin);
if(ret==0){
printf("Campo destinado para numeros inteiros, insira novamente:");
getch();
system("cls");
}
}while(ret==0);
return numero;
}
// SubAlgoritmo
// Objetivo: verificar se existem matriculas repetidas
// Parâmetros: referncia ao ponteiro de matriculas, contador do ultima matricula lida
// Retorna: validação
int verificaRepetido(int *matriculas, int ultimoLido)
{
int cont;
int flag;
for(cont=0;cont<ultimoLido;cont++){
if( *(matriculas+ultimoLido ) == *(matriculas+cont) ){
flag=1;
break;
}
}
return flag;
}
// SubAlgoritmo
// Objetivo: Ler uma matricula
// Parâmetros: Referencia ao ponteiro do vetor de matriculas,
// Retorna:
void leValidaMatriculas(int *matricula, char *titulo, int aux)
{
printf(titulo);
*(matricula+aux)=leValidaInt("Insira:");
}
//Objetivo:ler e validar um salario
//Referencia:
//Retorno:
void leValidaSalario(float *ptrSalarios,int min,int max, char *titulo, int cont)
{
do{
printf(titulo);
*(ptrSalarios)=leValidaFloat("Insira:");
}while( *(ptrSalarios+cont)<min || *(ptrSalarios+cont)>max);
}
//Objetivo:Ler e validar um numero float
//Referencia:
//Retorno:
float leValidaFloat(char *titulo)
{
int ret;
float numero;
do{
printf(titulo);
fflush(stdin);
ret=scanf("%d",&numero);
fflush(stdin);
if(ret==0){
printf("Campo destinado para numeros inteiros, insira novamente:");
getch();
system("cls");
}
}while(ret==0);
return numero;
}