Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

mariana.duarte

[Resolvido] Problema com a função excluir

Recommended Posts

Gente, estou fazendo um dicionário, mas não estou conseguindo implementar corretamente a função excluir...

 

A primeira dúvida é o seguinte:

eu fiz essa função e está dando erro, diz conversão inválida de char* para char... Está correta? Porque eu quero excluir somente uma palavra específica...

 

 

Dic* excluir(Dic *d, char palavra);

 

E o código abaixo... Queria saber o que estou fazendo de errado na implementação dessa função... Se alguém puder ajudar, obrigada (:

 

 

 

 

 

 

CODE
#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#include<string.h>

 

typedef struct dic{

char palavra[30], sig[150];

struct dic *prox;

}Dic;

 

Dic* inserir(Dic *d);

 

void consultar(Dic *d);

 

void alterar(Dic *d);

 

Dic* excluir(Dic *d, char pal);

 

char imprimir(Dic *d);

 

main(){

char opcao, op, palavra[30], signif[150],pe[30];

Dic *dicionario,*inicio=NULL,*ant;

 

 

do{

printf("ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª\n");

printf("1 - Inserir uma nova palavra\n");

printf("2 - Consultar o significado de uma palavra\n");

printf("3 - Alterar uma palavra\n");

printf("4 - Excluir uma palavra\n");

printf("5 - Imprimir o dicionario\n");

printf("0 - Sair\n");

printf("ªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªªª\n\n\n");

fflush(stdin);

scanf("%c",&opcao);

 

if(opcao=='1'){

dicionario = inserir(dicionario);

getch();

}

if(opcao=='2'){

/*printf("\nDigite a palavra a ser consultada:\n");

gets(pal);*/

consultar(dicionario);

getch();

}

//if(opcao=='3'){

/*printf("1 - Alterar a palavra\n");

printf("2 - Alterar o significado\n");

printf("3 - Alterar palavra e significado\n");

fflush(stdin);

scanf("%c",&op);

 

if(op=='1'){

printf("\nDigite a palavra a ser alterada:\n");

gets(p);

alterar(dicionario);

getch();

}*/

if(opcao=='4'){

printf("\nDigite a palavra a ser excluida:\n");

fflush(stdin);

scanf("%s",pe);

excluir(dicionario,pe);

getch();

}

/*if(opcao=='5'){

imprimir(dicionario);

getch();

}*/

if(opcao=='0'){

printf("\nEnter para sair...");

getch();

}

system("cls");

}while(opcao!='0');

}

 

Dic* inserir(Dic *d){

Dic *aux;

char op;

do{

aux=(Dic*)malloc(sizeof(Dic));

printf("\nDigite a palavra:\n");

fflush(stdin);

gets(aux->palavra);

printf("\nDigite o significado:\n");

fflush(stdin);

gets(aux->sig);

aux->prox=d;

d=aux;

printf("\nDeseja digitar uma nova palavra? (s/n)");

fflush(stdin);

scanf("%c",&op);

}while(op=='s' || op=='S');

return d;

}

 

void consultar(Dic *d){

Dic *aux;

int a=0;

char op;

char pal[30];

do{

printf("\nDigite a palavra a ser consultada:\n");

fflush(stdin);

scanf("%s",pal);

aux=d; //busca na lista

//a=0;//--> pra verificar se o elemento foi encontrado

while(aux!=NULL){

if(strcmp(aux->palavra,pal)==0){

printf("\nO significado da palavra é:\n");

printf("%s",aux->sig);

a=1;

break;

}

else

aux=aux->prox;

} //aviso: deve-se fechar o while antes de verificar se o elemento não foi encontrado

if(a==0){

printf("\nPalavra não encontrada");

}

printf("\nDeseja procurar mais alguma palavra? (s/n)");

fflush(stdin);

scanf("%c",&op);

}while(op=='s'||op=='S');

}

 

//void alterar(Dic *d);

 

void excluir(Dic *d, char pal){

Dic *aux,*ant;

char pal[30];

 

 

aux=d;

ant=NULL;//ainda não entrou

while(aux->palavra!=pal){

ant=aux;

aux = aux->prox;

}

if(aux==d){

d=aux->prox;

free(aux);

}

else{

if(aux==NULL)

printf("\nPalavra não encontrada");

else{

ant->prox=aux->prox;

free(aux);

}

}

aux=d;

while(aux!=NULL){

printf("\n Valor : %d",aux->palavra);

aux=aux->prox;

}

}

//char imprimir(Dic *d);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Voce está passando duas strings para a função excluir.

 

excluir(dicionario,pe);

Porém na definição da função é esperado uma string e um caracter.

Se precisa dessa palavra na função, então defina a função para receber duas strings:

 

Dic* excluir(Dic *d, char *palavra);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está, mas na parte que recebe como parâmetro na função excluir estava como char.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pe é uma string, mas a função estava esperando um char.

Por isso aparece aquele erro: conversão inválida de char* para char.

 

Oi...

 

Obrigada =)

 

Mas, tipo, pe também já não está definido como string?

Compartilhar este post


Link para o post
Compartilhar em outros sites

e me diz uma coisa pq tem q ser: Dic* excluir(Dic *d, char *palavra);

ele tem q retornar uma struct?? naum é melhor retornar um valor inteiro tipo ow 1 ow -1!

se 1 entaum removido, se -1 naum removido!

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.