Ir ao conteúdo

Verificar se existe duplicação de valor na lista - c


Ir à solução Resolvido por 1freakday,

Posts recomendados

Postado

Pessoal, bom dia.

 

Estou programando com listas e preciso saber se o valor inserido no cadastro já existe na lista. Por exemplo: Insiro o CPF: 111.222.333.22, ele vai verificar se o cpf já está incluso na list, e caso esteja deve retornar uma msg de erro informando que o mesmo já existe e pede para inserir um novo CPF. A função para adicionar os valores atualmente está assim:

 

OBS: CPF é uma string.

 

void addNode(Node **n) {

  Node *newNode = (Node *) malloc(sizeof(Node));

  newNode->proximo = NULL;
  newNode->porIdade = NULL;
  newNode->porSexo = NULL;
  newNode->porOcupacao = NULL;

  printf("\nEntre com o nome: ");
  scanf("%s", newNode->nome);
  printf("\nEntre com o CPF (xxx.xxx.xxx-xx): ");
  scanf("%s%*c", &newNode->CPF);
  printf("\nEntre com a idade: ");
  scanf("%d%*c", &newNode->idade);
  printf("\nEntre com o sexo: ");
  scanf("%c", &newNode->sexo);
  printf("\nEntre com a ocupacao: ");
  scanf("%s%*c", newNode->ocupacao);

  insert(n, newNode);

}

 

Pessoal, sabem me dar alguma dica sobre como proceder?

Obrigado!

Postado

É só criar uma função que corre a lista inteira comparando o CPF digitado com os que estão na lista. O retorno pode ser por exemplo 1 para valor igual ou 0 para nenhum valor encontrado.

Postado

A função teria que ser boolean?

 

Estou tentando usar essa função e não estou conseguindo também.

 

void CPF_lookup(Node **n, char *par) {

  Node *it = *n;

  while(it=!NULL){
    if((strcmp(it->CPF,par)==0)){
    printf("\nO CPF já existe, favor inserir um valor diferente\n");
    scanf("%s", &par);
    }
    *n = (*n)->proximo;
    it->proximo = NULL;
  }
}

 

Postado

Corrigindo:

bool CPF_lookup(Node *n, const char *par) {//Mudei para Node * pois, se você enviar um vetor de Node, você teria que determinar qual sera acessado no loop
  Node *it = n;
  while(it=!NULL){
    if((strcmp(it->CPF,par)==0)){
     //Abaixo é imprudente, pois você teria que verificar tudo de novo, melhor
     //retornar o resultado bool
   	 //printf("\nO CPF já existe, favor inserir um valor diferente\n");
   	 //scanf("%s", &par);
     return true;//Retorna que esta sendo usado
    }
    it = it->proximo;//Proximo node
  }
  return false;//Retorna que não esta sendo usado.
}

 

Postado

Estou fazendo uns testes aqui, deu o erro no método:

 

Tá dando 'unknown type name bool' e 'incompatible types when initializing type 'struct Node *' using type 'Node'.

 

Tem ideia do que seja isso?

  • Solução
Postado

Como você está usando C, não há o tipo bool por padrão, porém você pode criar com int, ou criar um tipo enum bool com os valores true e false.

No segundo, se você está passando um vetor Node criado com índice [] e não ponteiro *, você tem que passar o endereço para o ponteiro do parâmetro (na chamada do função).

Exemplo:

int main(){

      struct Node no[1];

      CPF_lookup(&no[0]);

}

Postado

Só pra avisar que resolvi o problema! Obrigado por sua colaboração @1freakday

 

int CPF_lookup(Node *n, const char *par) {

  Node *it = n;
  int x;
  while(it!=NULL){
    x = strcmp(it->CPF,par);
    if(!x) return x;
    else it = it->proximo;

  }
  return -1;
}

 

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!