Ir ao conteúdo
  • Cadastre-se
Philipe de Souza

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

Recommended Posts

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

É 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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
  }
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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]);

}

Compartilhar este post


Link para o post
Compartilhar em outros sites

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;
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×