2
I’m trying to compare two strings, when I enter a name in my chained list it cannot be entered if it already exists. I have used the function searchname to display a searched name and to delete, but now it is simply giving Segmentation fault on the line calling the strcmp()
. Following is code for the problem functions.
void insere_inicio(celula *nodo) {
celula *teste;
printf("\t Nome: ");
ler_string(busca.nome, 30);
teste = busca_nome( nodo);
if (teste == NULL) {
celula *info;
info = malloc(sizeof (struct cel));
strcpy(info->nome, busca.nome);
printf("\t Rua: ");
ler_string(info->rua, 40);
printf("\t Cidade: ");
ler_string(info->cidade, 20);
printf("\t Estado: ");
ler_string(info->estado, 2);
printf("\t CEP: ");
scanf("%lu", &info->cep);
info -> prox = nodo -> prox;
nodo -> prox = info;
} else {
printf("Esse nome já está cadastrado !!");
}
free(teste);
}
/*
* função que faz a busca de um nome no programa
* le o nome que está localizado na struct busca.nome
* se encontra um nome igual retorna o ponteiro para o nome
* caso não encontre retorna um ponteiro NULL
*/
celula *busca_nome(celula *inicio) {
int flag = 0;
celula *info;
celula *anterior;
do {
if (flag == 0) {
anterior = inicio;
info = inicio -> prox;
flag = 1;
} else {
anterior = info;
info = info -> prox;
}
if (strcmp(busca.nome, info -> nome) == 0)
return anterior;
} while (info -> prox != NULL);
return NULL;
}
I will correct the pointed errors, if with flag is used because I have the first cell just as head, and I don’t use the same, so for when I’m going through the loop the first time I have to skip it and not read the same...
– pmargreff
But if it will run only the first time, then run out of the
do
and reverses the order ofelse
with theif
bottom. The algorithm becomes much simpler. Almost always when you have to use aflag
there’s something wrong with the algorithm.– Maniero