Ir ao conteúdo

Apenas um Erro, Alguém saberia dizer?


keytous

Posts recomendados

Postado

Boa tarde Pessoal

 
Estou com meu código praticamente pronto mas esta acontecendo apenas um erro q não consigo identificar, corrigir. Quando excluo algum registro e depois vou cadastrar outro novamente sem fechar o programa o cadastro duplica quando mando listar novamente. Alguém poderia me ajudar? Acredito q seja apenas um detalhe mas não o encontro. OBRIGADO !!
----------------------
# include <stdio.h>
 
struct dados{
int cod;
    char nome[30];
float salario;
char setor[30];
char funcao[30];
};
struct dados cadastro[100];
 
int main ();
 
int cadastrar (){
 
int cont = 0, i = 0;
char soun;
 
FILE *arquivo;
    arquivo = fopen("dados.txt", "r+");
    if (arquivo == NULL){
     printf ("ERRO !! Banco nao existe, criando novo Banco de Dados..."); fflush(stdin); getchar ();
     arquivo = fopen("dados.txt", "w+");
 
    } else {
     printf ("Banco de Dados Carregado com Sucesso !!");
     while (!feof(arquivo)){ // enquando não(!) chegar no final do arquivo
     fread(&cadastro, sizeof(struct dados), 1, arquivo);
    
     if (!feof(arquivo)){ // condicão caso não chegue no final, ou seja tem arquivos
     cont = cadastro.cod + 1;
     i++;
    
     }
}
    }
   
     do{
cadastro[cont].cod = cont;
      printf("\nCodigo: %d", cadastro[cont].cod); getchar ();
      printf("\nNome: "); fgets (cadastro[cont].nome, 30, stdin);
        printf("\nSalario: "); scanf ("%f", &cadastro[cont].salario); getchar();
printf("\nSetor de Trabalho: "); gets (cadastro[cont].setor);
printf("\nFuncao: "); gets (cadastro[cont].funcao);
 
        printf ("\nLentra (n) para novo cadastro, ou qualquer outra para sair: ");
scanf ("%c", &soun);
cont++; getchar ();
 
if (cont >= 100){
printf ("Esgotado limite de cadastro !!");
soun = 'a';     
}
     }while (soun == 'n');
    
     arquivo = fopen("dados.txt", "w");
     for(i=0; i < cont; i++){
     fwrite(&cadastro, sizeof(struct dados), 1, arquivo);
     }
     fclose(arquivo);
    
     main ();
}
 
int listar (){
int i, cont = 0;
 
FILE *arquivo;
  arquivo = fopen("dados.txt", "r");
 
while (!feof(arquivo)){
fread(&cadastro[cont], sizeof(struct dados), 1, arquivo);
 
if (!feof(arquivo)){
     cont++;
}
}
fclose(arquivo);
    
      for(i=0; i < cont; i++){
      printf("\nCodigo: %d", cadastro.cod);
         printf("\nNome: %s",cadastro.nome);
         printf("Salario: %5.2f\n",cadastro.salario);
         printf("Setor: %s\n",cadastro.setor);
         printf("Funcao: %s\n",cadastro.funcao);
     }
     main ();
}
 
int media (){
int cont = 0;
float salario = 0, mediasalario = 0;
 
FILE *arquivo;
  arquivo = fopen("dados.txt", "r");
 
  while (!feof(arquivo)){
fread(&cadastro[cont], sizeof(struct dados), 1, arquivo);
 
if (!feof(arquivo)){
     salario = salario + cadastro[cont].salario;
     cont++;
}
}
mediasalario = salario / cont;
printf ("\nAtualmente existe %d funcionarios contratados", cont);
printf ("\nA Media geral de Salario é: %5.2f por Funcionario Registrado\n\n", mediasalario);
 
main ();
}
 
int pesquisa (){
int cont = 0, codigo, aux = 2;
 
printf ("Digite o codigo do Funcionario: ");
scanf ("%d", &codigo);
printf ("\nPesquisando no Banco de Dados...");
 
FILE *arquivo;
  arquivo = fopen("dados.txt", "r");
 
  while (!feof(arquivo)){
fread(&cadastro[cont], sizeof(struct dados), 1, arquivo);
 
if (!feof(arquivo)){
if (codigo == cadastro[cont].cod){
aux = 1;
printf ("\n\n\nCadastro Encontrado !!");
printf("\nCodigo: %d", cadastro[cont].cod);
         printf("\nNome: %s",cadastro[cont].nome);
         printf("Salario: %5.2f\n",cadastro[cont].salario);
         printf("Setor: %s\n",cadastro[cont].setor);
         printf("Funcao: %s\n\n\n",cadastro[cont].funcao);
cont++;
}
if (aux == 2){
printf ("\nCadastro NAO Encontrado !!\n\n");
}
main ();
}
 
int excluir (){
 
int i = 0, cont = 0, codigo;
 
printf ("Digite o codigo do Funcionario: ");
scanf ("%d", &codigo);
 
FILE *arquivo;
    arquivo = fopen("dados.txt", "r+");
 
while (!feof(arquivo)){
     fread(&cadastro, sizeof(struct dados), 1, arquivo);
    
     if (!feof(arquivo)){
     cont = cadastro.cod + 1;
     i++;
    
     }
}
 
     arquivo = fopen("dados.txt", "w");
     for(i=0; i < cont; i++){
     if (cadastro.cod != codigo){
     fwrite(&cadastro, sizeof(struct dados), 1, arquivo);
     }
     }
     fclose(arquivo);
    
     main ();
}
 
int main (){
int op;
 
printf ("\nEscolha uma opcao\n");
printf ("\n(1) - Para Cadastrar");
printf ("\n(2) - Para Listar");
printf ("\n(3) - Media de Salario dos funcionarios");
printf ("\n(4) - Pesquisar Funcionario pelo Codigo de Cadastro");
printf ("\n(5) - Excluir arquivo");
printf ("\n(0) - Sair \n\n>> ");
scanf ("%d", &op);
 
if (op == 1){
cadastrar ();
}
if (op == 2){
listar ();
}
if (op == 3){
media ();
}
if (op == 4){
pesquisa ();
}
if (op == 5){
excluir ();
}
if (op == 0){
return 0;
}
}
---------------------------------------
Postado

Como eu jogo dendo desse spoile???


# include <stdio.h>//# include <cstdio>struct dados{	int cod;    char nome[30];	float salario;	char setor[30];	char funcao[30];	};struct dados cadastro[100];int main ();void cadastrar (){		int cont = 1, i = 0, j;	char soun;		FILE *arquivo;    arquivo = fopen("dados.txt", "r");    if (arquivo == NULL){    	printf ("ERRO !! Banco nao existe, criando novo Banco de Dados..."); getchar ();    	arquivo = fopen("dados.txt", "w");			    } else {    	printf ("Banco de Dados Carregado com Sucesso !!");    	while (!feof(arquivo)){				// enquando não(!) chegar no final do arquivo    		fread(&cadastro[i], sizeof(struct dados), 1, arquivo);    	    		if (!feof(arquivo)){			// condicão caso não chegue no final, ou seja tem arquivos    			cont = cadastro[i].cod + 1;    			i++;									    	}		}    }        do{		cadastro[cont].cod = cont;     	printf("\nCodigo: %d", cadastro[cont].cod);	getchar ();     	printf("\nNome: "); fgets (cadastro[cont].nome, 30, stdin);        printf("\nSalario: "); scanf ("%f", &cadastro[cont].salario);	getchar();		printf("\nSetor de Trabalho: "); gets (cadastro[cont].setor);		printf("\nFuncao: "); gets (cadastro[cont].funcao);		        printf ("\nLetra (n) para novo cadastro, ou qualquer outra para sair: ");		scanf ("%c", &soun);										cont++;	getchar ();				if (cont >= 100){																			printf ("Esgotado limite de cadastro !!");			soun = 'a';				    		}	     }while (soun == 'n');        			arquivo = fopen("dados.txt", "a+");	//Abre um arquivo texto para gravação e leitura. Se o arquivo já existir, os dados     			for(j=i; j < cont; j++){			//serão adicionados no fim do mesmo. Caso contrário, um novo arquivo será criado.    				fwrite(&cadastro[j], sizeof(struct dados), 1, arquivo);    			}    			fclose(arquivo);    			    			main ();}	void listar (){		int i, cont = 0;			FILE *arquivo;	 	arquivo = fopen("dados.txt", "r");				while (!feof(arquivo)){			fread(&cadastro[cont], sizeof(struct dados), 1, arquivo);						if (!feof(arquivo)){							    			cont++;			}		}		fclose(arquivo);         	for(i=1; i < cont; i++){     		printf("\nCodigo: %d", cadastro[i].cod);        	printf("\nNome: %s",cadastro[i].nome);        	printf("Salario: %5.2f\n",cadastro[i].salario);        	printf("Setor: %s\n",cadastro[i].setor);        	printf("Funcao: %s\n",cadastro[i].funcao);    	}    	main ();}	void media (){		int cont = 0;		float salario = 0, mediasalario = 0;			FILE *arquivo;	 	arquivo = fopen("dados.txt", "r");	 		 	while (!feof(arquivo)){			fread(&cadastro[cont], sizeof(struct dados), 1, arquivo);						if (!feof(arquivo)){						    			salario = salario + cadastro[cont].salario;    			cont++;			}			}		mediasalario = salario / cont;		printf ("\nAtualmente existe %d funcionarios contratados", cont);		printf ("\nA Media geral de Salario eh: %5.2f por Funcionario Registrado\n\n", mediasalario);				main ();}void pesquisa (){		int cont = 0, codigo, aux = 2;				printf ("Digite o codigo do Funcionario: ");		scanf ("%d", &codigo);		printf ("\nPesquisando no Banco de Dados...");				FILE *arquivo;	 	arquivo = fopen("dados.txt", "r");	 		 	while (!feof(arquivo)){			fread(&cadastro[cont], sizeof(struct dados), 1, arquivo);						if (!feof(arquivo)){				if (codigo == cadastro[cont].cod){					aux = 1;						printf ("\n\n\nCadastro Encontrado !!");					printf("\nCodigo: %d", cadastro[cont].cod);        			printf("\nNome: %s",cadastro[cont].nome);        			printf("Salario: %5.2f\n",cadastro[cont].salario);        			printf("Setor: %s\n",cadastro[cont].setor);        			printf("Funcao: %s\n\n\n",cadastro[cont].funcao);				} 			cont++;			} 		}		if (aux == 2){			printf ("\nCadastro NAO Encontrado !!\n\n");		}				main ();}void excluir (){	int cont = 0, i = 0, codigo;		printf ("Digite o codigo do Funcionario: ");	scanf ("%d", &codigo);	FILE *arquivo;    arquivo = fopen("dados.txt", "r+");		    	while (!feof(arquivo)){				    	fread(&cadastro[i], sizeof(struct dados), 1, arquivo);    	    	if (!feof(arquivo)){			    		cont = cadastro[i].cod + 1;    		i++;						    	}		}        			arquivo = fopen("dados.txt", "w");    			for(i=0; i < cont; i++){    				if (cadastro[i].cod != codigo){    					fwrite(&cadastro[i], sizeof(struct dados), 1, arquivo);    				}    			}    			fclose(arquivo);    			    	main ();}int main (){	int op;		printf ("\nEscolha uma opcao\n");	printf ("\n(1) - Para Cadastrar");	printf ("\n(2) - Para Listar");	printf ("\n(3) - Media de Salario dos funcionarios");	printf ("\n(4) - Pesquisar Funcionario pelo Codigo de Cadastro");	printf ("\n(5) - Excluir Cadastro");	printf ("\n(0) - Sair \n>> ");	scanf ("%d", &op);		if (op == 1){		cadastrar ();	}	if (op == 2){		listar ();	}	if (op == 3){		media ();	}	if (op == 4){		pesquisa ();	}	if (op == 5){		excluir();	}	if (op == 0){		return 0;	}}

Encontrei !!

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!