Estou com essa questão no trabalho e não estou conseguindo relaizar a alocaçao de memoria corretamente para o arquivo,
fico agradecida se alguém puder dar uma ajudazinha. já tentei de varias maneiras mas sempre da erro, já pesquisei também mas não
achei soluçao ainda.
void leArquivo(void)
{
//Variáveis locais
FILE* prArquivo = NULL;
char sTempNome[50];
char sLinha[100];
int iDia = 0;
int iFuncionario = 0;
int iContador = 0;
//Realiza abertura do arquivo
prArquivo = fopen("ArquivoPonto.txt","r");
//Verifica se o arquivo foi aberto com sucesso
if (!prArquivo)
{
printf("Erro ao tentar abrir o arquivo ponto!");
exit(1);
}
//Le a primeira linha do arquivo e quebra os tokens (mes e ano)
fgets(sLinha,100,prArquivo);
strcpy(sMes,strtok(sLinha,";"));
iAno = atoi(strtok(NULL,";"));
//Le a segunda e terceira linha do arquivo linha do arquivo (quantidade de dias do mês que foram trabalhados na empresa e a quantidade de funcionários da empresa)
fgets(sLinha,100,prArquivo);
iTotalDiasTrabalhados = atoi(sLinha);
fgets(sLinha,100,prArquivo);
iQtdFuncionarios = atoi(sLinha);
//Aloca a memória para a estrutura
alocaMemoria();
//Verifica se a memória foi alocada
if (!prDadosPonto)
{
printf("Memoria não alocada!");
exit(0);
}
//Inicializa a estrutura
inicializa();
//Realiza a leitura das linhas restantes do arquivo que representam o total de dias trabalhados na empresa * total de funcionarios
Pergunta
Jackeline
Boa noite!
Estou com essa questão no trabalho e não estou conseguindo relaizar a alocaçao de memoria corretamente para o arquivo,
fico agradecida se alguém puder dar uma ajudazinha. já tentei de varias maneiras mas sempre da erro, já pesquisei também mas não
achei soluçao ainda.
void leArquivo(void)
{
//Variáveis locais
FILE* prArquivo = NULL;
char sTempNome[50];
char sLinha[100];
int iDia = 0;
int iFuncionario = 0;
int iContador = 0;
//Realiza abertura do arquivo
prArquivo = fopen("ArquivoPonto.txt","r");
//Verifica se o arquivo foi aberto com sucesso
if (!prArquivo)
{
printf("Erro ao tentar abrir o arquivo ponto!");
exit(1);
}
//Le a primeira linha do arquivo e quebra os tokens (mes e ano)
fgets(sLinha,100,prArquivo);
strcpy(sMes,strtok(sLinha,";"));
iAno = atoi(strtok(NULL,";"));
//Le a segunda e terceira linha do arquivo linha do arquivo (quantidade de dias do mês que foram trabalhados na empresa e a quantidade de funcionários da empresa)
fgets(sLinha,100,prArquivo);
iTotalDiasTrabalhados = atoi(sLinha);
fgets(sLinha,100,prArquivo);
iQtdFuncionarios = atoi(sLinha);
//Aloca a memória para a estrutura
alocaMemoria();
//Verifica se a memória foi alocada
if (!prDadosPonto)
{
printf("Memoria não alocada!");
exit(0);
}
//Inicializa a estrutura
inicializa();
//Realiza a leitura das linhas restantes do arquivo que representam o total de dias trabalhados na empresa * total de funcionarios
for(iContador = 0; iContador< (iTotalDiasTrabalhados * iQtdFuncionarios); iContador++)
{
//Le a linha do arquivo e quebra os tokens
fgets(sLinha,100,prArquivo);
//Quebra os tokens da linha
strcpy(sTempNome,strtok(sLinha,";"));
//Verifica a posicao de onde o registro será inserido
iFuncionario = insereRegistro(sTempNome);
//Verifica se do funcionário já foi cadastrado no vetor
if (strcmp(prDadosPonto[iFuncionario].sNome,"")==0)
{
strcpy(prDadosPonto[iFuncionario].sNome,sTempNome);
}
//Realiza a leitura do dia e valores de ponto para manhã e tarde
iDia = atoi(strtok(NULL,";"));
prDadosPonto[iFuncionario].vPontoDia[iDia-1].iManha= atoi(strtok(NULL,";"));
prDadosPonto[iFuncionario].vPontoDia[iDia-1].iTarde= atoi(strtok(NULL,";"));
}
//Fecha o arquivo
fclose(prArquivo);
}
/***********************************************************
*Nome: alocaMemoria()
*Descrição: função utilizada para alocar memória para armazenar os registros de ponto dos funcionários
*Parametros: void
*Retorno: void
************************************************************/
void alocaMemoria(void)
{
// IMPLEMENTE AQUI
}
/***********************************************************
*Nome: inicializa()
*Descrição: inicializa a estrutura de armazenamento dos registros de ponto dos funcionários
*Parametros: void
*Retorno: void
************************************************************/
void inicializa(void)
{
//Variáveis locais
int iFuncionario=0, iDia=0;
for (iFuncionario=0; iFuncionario < iQtdFuncionarios; iFuncionario++)
{
strcpy(prDadosPonto[iFuncionario].sNome,"");
for (iDia = 0; iDia < iTotalDiasTrabalhados; iDia++)
{
prDadosPonto[iFuncionario].vPontoDia[iDia].iManha = 0;
prDadosPonto[iFuncionario].vPontoDia[iDia].iTarde = 0;
}
}
}
/***********************************************************
*Nome: desalocaMemoria()
*Descrição: função utilizada para liberar a memória alocada
*Parametros: void
*Retorno: void
************************************************************/
void desalocaMemoria(void)
{
//Variáveis locais
int iFuncionario = 0;
//Libera o vetor de dias para cada funcionario
for (iFuncionario=0; iFuncionario < iQtdFuncionarios; iFuncionario++)
{
free(prDadosPonto[iFuncionario].vPontoDia);
}
//Libera o vetor de pontos
free(prDadosPonto);
}
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.