too many arguments to function 'address * find ()'

2

I'm trying to compile this code in DevC ++ but still giving this error

  

[Error] too many arguments to function 'address * find ()'

#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 menssagem */

void entrada(char *menssagem,char *s,int cont)
{
    char p[255];
    //int tamanho;
    do
    {
        printf(menssagem);
        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);
}

    
asked by anonymous 17.11.2016 / 19:19

1 answer

4

Let's get this function start:

void apaga(struct endereco **primeiro,struct endereco **ultimo) {
    struct endereco *info;
    struct endereco *encontra(); // =============> declaração aqui
    char s[80];
    printf("Entre o nome: ");
    gets(s);
    info = encontra(s);

You declare a function within this function. Just declare, do not define . This is already weird, it's on the way to giving something wrong. In the declaration there are no parameters, the parentheses are empty. There in the last line uses the function passing an argument. It will not work.

  

Ah, but I declare this function with a parameter elsewhere

The priority is the one that is closest. I do not even know why you declared that role there. I'd just take it off. You may have other errors of this type.

I can not make more precise claims because the code is very confusing.

gets() should not be used nor in C, let alone in C ++. Just to cite a problem in the code. In fact this code has nothing of C ++.

Dev-C ++ is a very problematic IDE and should be abandoned. I do not know why so many people use something so bad.

    
17.11.2016 / 19:40