Ir ao conteúdo
  • Cadastre-se
Gabsouza12

C++ error too many arguments to function 'endereco* encontra()'

Recommended Posts

Estou criando uma espécie de agenda em C++ com lista dinâmica e salvando em um txt porém ele dá o seguinte erro

 

Citação

C++ [Error] too many arguments to function 'endereco* encontra()'

 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct endereco 
{
	char nome[30];
	char rua[40];
	char cidade[20];
	char estado[3];
	char cep[10];
	struct endereco *proximo;  
/*ponteiro para a próxima entrada */
    struct endereco *anterior; 
/*ponteiro para registro anterior */
} lista;

struct endereco *primeiro; 
/*ponteiro para a primeiro entrada da lista*/
struct endereco *ultimo;   
/*ponteiro para a   ultimo entrada da lista*/ 

struct endereco	*encontra(char *);

void entra(void);
void procura(void);
void salva(void);
void carrega(void);
void listar(void);
void apaga(struct endereco **, struct endereco **);
void armazena(struct endereco *i,struct endereco **inicio, 
			                     struct endereco **ultimo);
void entrada(char *,char *,int);
void exibe(struct endereco *);
int seleciona_menu(void);

int main(void)
{
	/*inicializa os ponteiros de topo e fundo*/
	primeiro = NULL;
	ultimo   = NULL;
	
	while(1) 
	{
		switch(seleciona_menu()) 
		{
			case 1: entra();
				break;
			case 2: apaga(&primeiro, &ultimo);
				break;
            case 3: listar();
				break;
			case 4: procura(); /*encontra uma rua*/
                break;
			case 5: salva(); /* grava a lista no disco*/
				break;
			case 6: carrega(); /*lê do disco*/
				break;
			case 7: exit(0);
		}
	}
}

/* Seleciona uma operação */

int seleciona_menu(void)
{
	char s[80];
	int c;
	puts("1 : Inserir um nome");
	puts("2 : Apagar um nome");
	puts("3 : Listar o arquivo");
	puts("4 : Pesquisar");
	puts("5 : Salvar o arquivo");
	puts("6 : Carregar o arquivo");
	puts("7 : Sair");
    do 
	{
		printf("\nEntre com sua escolha: ");
		gets(s);
		c = atoi(s);
	}while(c<0 || c>7);
	return c;
}
/* Insere nomes e endereços */
void entra(void)
{
	struct endereco *info;
	while(1)
	{
		info = (struct endereco *)malloc(sizeof(lista));
		if(!info)
		{
			printf("\nSem memória");
			return;
		}
		entrada("Entre o nome: ",info->nome,30);
		if(!info->nome[0]) break; /*Não efetua a inserção */
		entrada("Entre a rua: ",info->rua,40);		
        entrada("Entre a cidade: ",info->cidade,20);
		entrada("Entre a estado: ",info->estado,3);
		entrada("Entre a cep: ",info->cep,10);
		armazena(info,&primeiro,&ultimo);
	} /*laço de entrada*/
}
/* Esta função lê ua string de comprimento máximo cont e evita que a 
string seja ultrapassada. Ela também apresenta uma mensagem */

void entrada(char *mensagem,char *s,int cont)
{
	char p[255];
	//int tamanho;
	do
	{
		printf(mensagem);
		gets(p);
		//tamanho = strlen(p);
		if(strlen(p) > (size_t)cont) printf("\nMuito longo\n");
	}while(strlen(p) > (size_t)cont);
	strcpy(s,p);
}
/*Cria uma lista duplamente encadeada ordenada*/
void armazena(struct endereco *i,         /*novo elemento*/
              struct endereco **primeiro, /*primeiro elemento da lista*/
			  struct endereco **ultimo)   /*último   elemento da lista*/
{
	struct endereco *velho, *p;
	if(ultimo == NULL) /*primeiro elemento da lista*/
	{
		i->proximo  =  NULL;
		i->anterior = NULL;
		*ultimo     = i;
		*primeiro   = i;
		return;
	}
	p = *primeiro; /* começa no topo da lista*/
	velho = NULL;
	while(p)
	{
		if(strcpy(p->nome,i->nome)<0)
		{
			velho = p;
			p = p->proximo;
		}
		else 
		{
			if(p->anterior)
			{
				p->anterior->proximo = i;
				i->proximo = p;
				i->anterior = p->anterior;
                p->anterior = i;
				return;
			}
			i->proximo = p; /*novo primeiro elemento*/ 
			i->anterior = NULL;
			p->anterior = i;
			*primeiro = i;
		    return;
		}
	}
	velho->proximo = i; /*coloca no final*/
	i->proximo = NULL;
	i->anterior = velho;
	*ultimo = i;
}

/* Remove um elementi da lista */
void apaga(struct endereco **primeiro,struct endereco **ultimo)
{
	struct endereco *info;
	struct endereco *encontra();
	char s[80];
	printf("Entre o nome: ");
	gets(s);
	info = encontra(s);
	if(info)
	{
		if(*primeiro == info)
		{
			*primeiro = info->proximo;
			if(*primeiro) 
				(*primeiro)->anterior = NULL;
			else
				*ultimo = NULL;
		}
		else
		{
			info->anterior->proximo = info->proximo;
			if(info != *ultimo)
				info->proximo->anterior = info->anterior;
			else
				*ultimo = info->anterior;
		}
		free(info); /*devole memoria para o sistema*/
	}
}
/*Encontra um endereço */
struct endereco *encontra(char *nome)
{
	struct endereco *info;
	info = primeiro;
	while(info)
	{
		if(!strcmp(nome, info->nome) )return info;
		info = info->proximo; /*obtém novo endereço*/
	}
	printf("Nome não encontrado\n");
	return NULL; /*não encontrou*/
}
/*Mostra a lista completa*/
void listar(void)
{
	struct endereco *info;
	info = primeiro;
	while(info)
	{
		exibe(info);
		info = info->proximo; /*obtém próximo endereço*/
	}
	printf("\n\n");
}
void exibe(struct endereco *info)
{
	printf("%s\n",info->nome);
    printf("%s\n",info->rua);
	printf("%s\n",info->cidade);
	printf("%s\n",info->estado);
	printf("%s\n",info->cep);
    printf("\n\n");
}
/*Procura por um nome na lista*/
void procura(void)
{
	char nome[40];
	struct endereco *info;
    struct endereco *encontra();
	puts("Entre com o nome a procurar: ");
	gets(nome);
	info = encontra(nome);
	if(!info)
		printf("Não encontrou\n");
	else
		exibe(info);
}
/*Salva o arquivo em disco. */
void salva(void)
{
	struct endereco *info;
	FILE *fp;
	fp = fopen("lista.txt","wb");
	if(!fp)
	{
		puts("Arquivo nao pôde ser aberto");
		exit(1);
	}
	printf("\nSalvando arquivo...\n");
	info = primeiro;
	while(info)
	{
		fwrite(info,sizeof(struct endereco),1,fp);
		info = info->proximo; /*obtém próximo endereço*/
	}
	fclose(fp);
}
/*Carrega o arquivo de endereço */
void carrega()
{
	struct endereco *info;
	FILE *fp;
	fp = fopen("lista.txt","rb");
	if(!fp)
	{
		puts("Arquivo nao pôde ser aberto");
		exit(1);
	}
	/*libera qualquer memória previamente alocada*/
	while(primeiro)
	{
		info = primeiro->proximo;
		free(info);
		primeiro = info;
	}
	/*reinicializa os ponteiros de início e fim*/
	primeiro = NULL;
	ultimo   = NULL;
	printf("\nCarregando arquivo...\n");
    while(!feof(fp))
	{
		info = (struct endereco *)malloc(sizeof(struct endereco));
		if(!info)
		{
			printf("sem memória");
			return;
		}
		if(1 != fread(info,sizeof(struct endereco),1,fp)) break;
		armazena(info, &primeiro,&ultimo);
	}
	fclose(fp);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O erro deve estar nesse tipo de declaraçao em algumas funções,

 


struct endereco *encontra();

 

Já existe uma função com esse nome.

Editado por olliver.soul

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×