0
In my project, I am making a double-padlock list in C, where it has simple objectives, such as adding at the beginning or end, removing a specific or zeroing.
I took a shallow code and was adding the modules I needed, using code Blocks.
Then in the part of adding the option delete the specific element, began to appear the errors that could no longer solve.
#include <stdio.h>
#include <stdlib.h>
struct Banco{
int numero_conta;
char nome_cliente[30];
float saldo;
struct Banco *atras;
struct Banco *agora;
struct Banco *prox;
struct Banco *ant;
};
typedef struct Banco node;
void inicia(node *LISTA);
int menu(void);
void opcao(node *LISTA, int op);
node *criaNo();
void insereFim(node *LISTA);
void insereInicio(node *LISTA);
void exibe(node *LISTA);
void libera(node *LISTA);
void excluir (node *LISTA);
int main(void)
{
node *LISTA = (node *) malloc(sizeof(node));
if(!LISTA){
printf("Sem memoria disponivel!\n");
exit(1);
}
inicia(LISTA);
int opt;
do{
opt=menu();
opcao(LISTA,opt);
}while(opt);
free(LISTA);
return 0;
}
void inicia(node *LISTA)
{
LISTA->prox = NULL;
}
int menu(void)
{
int opt;
printf("Escolha a opcao\n");
printf("0. Sair\n");
printf("1. Exibir lista\n");
printf("2. Adicionar cliente no inicio\n");
printf("3. Adicionar cliente no final\n");
printf("4. Zerar lista\n");
printf("5. Excluir cliente especifico\n");
printf("Opcao: "); scanf("%d", &opt);
return opt;
}
void opcao(node *LISTA, int op)
{
switch(op){
case 0:
libera(LISTA);
break;
case 1:
exibe(LISTA);
break;
case 2:
insereInicio(LISTA);
break;
case 3:
insereFim(LISTA);
break;
case 4:
inicia(LISTA);
break;
default:
printf("Comando invalido\n\n");
}
}
int vazia(node *LISTA)
{
if(LISTA->prox == NULL)
return 1;
else
return 0;
}
void insereFim(node *LISTA)
{
node *novo=(node *) malloc(sizeof(node));
if(!novo){
printf("Sem memoria disponivel!\n");
exit(1);
}
//Comeco ediчуo do professor
printf("Numero conta: "); scanf("%d", &novo->numero_conta);
printf("Nome: "); scanf("%s", novo->nome_cliente);
printf("Saldo: "); scanf("%f", &novo->saldo);
novo->prox = NULL;
//Fim da ediчуo do professor
if(vazia(LISTA))
LISTA->prox=novo;
else{
node *tmp = LISTA->prox;
while(tmp->prox != NULL)
tmp = tmp->prox;
tmp->prox = novo;
}
}
void insereInicio(node *LISTA)
{
node *novo=(node *) malloc(sizeof(node));
if(!novo){
printf("Sem memoria disponivel!\n");
exit(1);
}
printf("Numero conta: "); scanf("%d", &novo->numero_conta);
printf("Nome: "); scanf("%s", novo->nome_cliente);
printf("Saldo: "); scanf("%f", &novo->saldo);
node *oldHead = LISTA->prox;
LISTA->prox = novo;
novo->prox = oldHead;
}
void exibe(node *LISTA)
{
if(vazia(LISTA)){
printf("Lista vazia!\n\n");
return ;
}
node *tmp;
tmp = LISTA->prox;
//Edicao do professor ("%d %s %f\n", tmp->numero_conta, tmp->nome_cliente, tmp->saldo)
while( tmp != NULL){
printf("\n");
printf("Numero conta: %d\n", tmp->numero_conta);
printf("Nome: %s\n", tmp->nome_cliente);
printf("Saldo: %f\n", tmp->saldo);
printf("\n");
tmp = tmp->prox;
}
printf("\n\n");
}
void libera(node *LISTA)
{
if(!vazia(LISTA)){
node *proxNode,
*atual;
atual = LISTA->prox;
while(atual != NULL){
proxNode = atual->prox;
free(atual);
atual = proxNode;
}
}
}
The first mistake is when I add:
case 5:
excluir(LISTA);
break;
undefined reference to `excluir'
I’ve seen many tutorials, but none of them made me useful unfortunately.
Could someone help me ? How would it be to add a specific client Delete system in my code ?
Edit: I added this function
void excluir(LISTA* LISTA, int numero_conta) {
if (LISTA == 0)
pop(list);
else{
node* atual = atPos (list, LISTA);
if(atual !=null){
node* atras = atual = atpost(list, LISTA - 1);
atras->prox = atual->prox;
free(atual)
list-> menu --;
}
}
}
but the message appears error: Unknown type name 'LIST'|
where is the "delete function" ?
– zentrunix
You set: void delete (Node LIST); but implemented: void delete(LIST LIST, int numero_conta) {. LIST is not a type, the type is Node and if there are two parameters you need to specify this in the function prototype.
– anonimo