Ir ao conteúdo
  • Cadastre-se

Gabsouza12

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

posts postados por Gabsouza12

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

     

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...