Ir ao conteúdo
  • Cadastre-se

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


Gabsouza12

Posts recomendados

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);
}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...