Ir ao conteúdo
  • Cadastre-se

Consultar uma lista com uma string


Ir à solução Resolvido por Gustavo Andretto,

Posts recomendados

Estou fazendo um exercício aqui que pede para montar uma lista com os dados de uma pessoa e que permita a consulta de seus dados pelo nome da pessoa.

Eu consegui fazer para mostrar os dados presentes na lista somente, agora fazer uma pesquisa não estou conseguindo. Se alguém puder me explicar como faz eu agradeço muito.

Link para o comentário
Compartilhar em outros sites

use strcmp() pra verificar o nome que você busca com os nomes na lista.

exemplo:

// laço para procurar pelo nome na lista, TAMANHO_LISTA é o tamanho de sua lista
for (int i = 0; i < TAMANHO_LISTA; i++) 
{
  // condição que verifica se o nome à ser procurado é igual ao nome que está na lista
  // strcmp() -> 1 parâmetro recebe o nome à ser procuraro, 2 parâmetro recebe a posição do nome que esta a ser comparado no momento
  // strcmp retorna 0 se os valores passados são iguais
  if (strcmp("joao", lista[i].nome) == 0) 
    printf("Encontrado, pos: [%d]\n", i);
}

 

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Gustavo Andretto disse:

use strcmp() pra verificar o nome que você busca com os nomes na lista.

exemplo:


// laço para procurar pelo nome na lista, TAMANHO_LISTA é o tamanho de sua lista
for (int i = 0; i < TAMANHO_LISTA; i++) 
{
  // condição que verifica se o nome à ser procurado é igual ao nome que está na lista
  // strcmp() -> 1 parâmetro recebe o nome à ser procuraro, 2 parâmetro recebe a posição do nome que esta a ser comparado no momento
  // strcmp retorna 0 se os valores passados são iguais
  if (strcmp("joao", lista[i].nome) == 0) 
    printf("Encontrado, pos: [%d]\n", i);
}

 

Veja o que está de errado porque está entrando num loop infinito.

void consultarDados(char *chave, LISTA *pCons){
    int i;
    
    for(i=0; i<sizeof(LISTA); i++){
        if(strcmp(chave, pCons->ps[i].nome)){
            printf("Logradouro: %s", pCons->ps[i].logr);
            printf("Número da casa: %d", pCons->ps[i].numCasa);
            printf("CEP: %s", pCons->ps[i].CEP);
            printf("Bairro: %s", pCons->ps[i].bairro);
            printf("Cidade: %s", pCons->ps[i].city);
            printf("Telefone: %s", pCons->ps[i].fone);
            printf("Nome do Pai: %s", pCons->ps[i].pai);
            printf("Nome da Mãe: %s", pCons->ps[i].mae);
        }
    }    
}

 

adicionado 3 minutos depois

Será que não seria por causa desse sizeof?

Porque eu coloquei para pegar o tamanho da struct LISTA.

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Solução

@Lucas Da Silva Rezende opa, erro meu, acabei te confundindo.

ali onde está TAMANHO_LISTA você coloca o tamanho da sua struct LISTA, a quantidade de cadastros que cabem.

struct LISTA lista_pessoa[30 /*<- TAMANHO_LISTA*/];
// aqui você tem que checar se retorno de strcmp foi 0(isequal)
if(strcmp(chave, pCons->ps[i].nome) == 0)

ou use o operador !
if(!strcmp(chave, pCons->ps[i].nome))

segue meu rascunho

#include <stdio.h>
#include <string.h>
  
#define QUANTIDADE_PESSOA 50
#define TAMANHO_NOME 32

typedef struct pessoa
{
	char nome[TAMANHO_NOME];
	int idade;
	//...
} pessoa_t;

typedef struct lista
{
	pessoa_t ps[QUANTIDADE_PESSOA];
} LISTA;

void consultarDados(char *chave, LISTA *pCons) {
	int i;

	for (i = 0; i < QUANTIDADE_PESSOA; i++) {
		if (!strcmp(chave, pCons->ps[i].nome))
		{
			printf("Nome: %s\n", pCons->ps[i].nome);
			printf("Idade: %d\n", pCons->ps[i].idade);
			//printf("Logradouro: %s", pCons->ps[i].logr);
			//printf("Número da casa: %d", pCons->ps[i].numCasa);
			//printf("CEP: %s", pCons->ps[i].CEP);
			//printf("Bairro: %s", pCons->ps[i].bairro);
			//printf("Cidade: %s", pCons->ps[i].city);
			//printf("Telefone: %s", pCons->ps[i].fone);
			//printf("Nome do Pai: %s", pCons->ps[i].pai);
			//printf("Nome da Mãe: %s", pCons->ps[i].mae);
		}
	}
}

int main()
{
	LISTA lista;

	strcpy(lista.ps[0].nome, "joao");
	lista.ps[0].idade = 15;
	strcpy(lista.ps[20].nome, "joao");
	lista.ps[20].idade = 26;

	consultarDados("joao", &lista);

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!