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);
}
Thanks for the answer, which IDE would be best recommended ?
– Felipe Auler
I don’t recommend anything. There’s Visual Studio, Code::Blocks, Eclipe, Netbeans, Clion, just to name a few.
– Maniero