Ir ao conteúdo
  • Cadastre-se

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


Ir à solução Resolvido por 1freakday,

Posts recomendados

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!

Link para o comentário
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;
  }
}

 

Link para o comentário
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.
}

 

Link para o comentário
Compartilhar em outros sites

  • Solução

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

}

Link para o comentário
Compartilhar em outros sites

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