Too Many Arguments to Function 'address* finds()'

Asked

Viewed 995 times

2

I am trying to compile this code in Devc++ but keeps giving this error

[Error] Too Many Arguments to Function 'address* finds()'

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

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

1 answer

4


Let’s take 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);

I put in the Github for future reference.

You declare a function within that function. Just states, doesn’t define. This is already weird, it is on the way to go wrong. In the statement there are no parameters, the parentheses are empty. Then in the last line uses the function passing an argument. It will not work.

Ah, but I declared this function with a parameter elsewhere

The priority is the one that is closest. I don’t even know why you declared this function there. I would just take that. Maybe I have other errors of this kind.

I can’t make more precise statements because the code is very confusing.

gets() should not be using even in C, let alone in C++. Just to cite a problem in the code. Actually this code has nothing of C++.

Dev C++ is a very problematic IDE and should be abandoned. I don’t know why so many people use something so bad.

  • Thanks for the answer, which IDE would be best recommended ?

  • I don’t recommend anything. There’s Visual Studio, Code::Blocks, Eclipe, Netbeans, Clion, just to name a few.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.