Ir ao conteúdo
  • Cadastre-se

C Questão de String em C para acessar nome de comvidados


Íssa Tainnah

Posts recomendados

Tenho que resolver essa questão, sei o sentido lógico, porém estou com dificuldades pra montar o código na linguagem C. Dados a lista de convidados de uma festa e o nome de uma pessoa, determinar se essa pessoa é ou não convidada da festa. Codifique um programa completo para resolver esse problema. Crie um procedimento para fazer a entrada da lista de convidados e adapte a função buscaSeq para verificar se o nome consta ou não da lista.

Link para o comentário
Compartilhar em outros sites

1 hora atrás, Lukashalan disse:

Qual parte do código você tem dificuldade? leitura das informações? processamento? impressão de dados?

Na 3 e 4, estou sem saber o que fazer

typedef struct pessoa{

char nome[30];

}p;

 

int procura(char *nome, int tamanho, char encontro){

   char i=0, aqui=0;

    while (i<tamanho && aqui==0 && nome[i]==encontro){

     

      i++;

    }

  return (aqui);

}

 

p conv[MAX]; //p associa o vetor a struct que possui a variável com a qauntidade de caractere que pode ser incerido na string

int main(void ){

    int i; //variável de auxílio

    char achou;

    printf ("\n============= Nome dos Convidados =============\n");

    printf(" Convidados:\n");

    for (int i = 0; i < MAX; i++){

      scanf(" %s",conv[i].nome);

    }

    //2) Informar quem são

    printf("Lista dos convidados: \n");

    for(i = 0; i < MAX; i++){

      printf (" %s\n",conv[i].nome) ; //mostra a lista digitada

    }

    //3) Procurar a pessoa que deseja entrar na festa

    printf ("Quem procura?! ");

    scanf("%s",achou);

    printf("Valor encontrado?! --> %d\n",procura(conv[i].nome,MAX,achou));

    //4) Verificar se essa pessoa foi ou não convidada

    return 0;

   

}

agora, Íssa Tainnah disse:

Na 3 e 4, estou sem saber o que fazer

typedef struct pessoa{

char nome[30];

}p;

 

int procura(char *nome, int tamanho, char encontro){

   char i=0, aqui=0;

    while (i<tamanho && aqui==0 && nome[i]==encontro){

     

      i++;

    }

  return (aqui);

}

 

p conv[MAX]; //p associa o vetor a struct que possui a variável com a qauntidade de caractere que pode ser incerido na string

int main(void ){

    int i; //variável de auxílio

    char achou;

    printf ("\n============= Nome dos Convidados =============\n");

    printf(" Convidados:\n");

    for (int i = 0; i < MAX; i++){

      scanf(" %s",conv[i].nome);

    }

    //2) Informar quem são

    printf("Lista dos convidados: \n");

    for(i = 0; i < MAX; i++){

      printf (" %s\n",conv[i].nome) ; //mostra a lista digitada

    }

    //3) Procurar a pessoa que deseja entrar na festa

    printf ("Quem procura?! ");

    scanf("%s",achou);

    printf("Valor encontrado?! --> %d\n",procura(conv[i].nome,MAX,achou));

    //4) Verificar se essa pessoa foi ou não convidada

    return 0;

   

}

A implementação da função está errada

Link para o comentário
Compartilhar em outros sites

@Íssa Tainnah Evite variáveis globais, deixe tudo em main e apenas passe como argumento para a função. Você poderia usar apenas string em vez de struct já que só terá que armazenar os nomes. E para procurar um nome sua função só precisa de dois parâmetros, um da lista e outro com do nome que quer procurar, p.ex:

int procura(char lista[MAX][30], char *nome){
    for(int i = 0; i < MAX; i += 1){
        if(!strcmp(lista[i], nome)){
            return 1;
        }
    }
    return 0;
}

 

Mas o enunciado diz para adaptar a função buscaSeq. Tentou fazer isso?

Link para o comentário
Compartilhar em outros sites

5 horas atrás, Midori disse:
int procura(char lista[MAX][30], char *nome){

 

Só precisa especificar a última dimensão, e só está conseguindo ver MAX porque é uma constante GLOBAL. E você está dizendo para não usar isso...

 

Em português o normal é procurar por algo em algum lugar, então o mais usual em português é

 

    int procura( char* nome, char lista[][30], size_t N);

 

Supondo que se possa assumir que lista tem strings terminadas por NULL de fato. Se não puder garantir isso precisa passar dois parâmetros com as dimensões, claro.

 

Note que uma declaração associa um nome a um tipo. nome é char*, lista é char[][30]. Procure declarar assim porque é a realidade. nome é char*, é o que está declarando. É claro que se nome é char* *nome é char, isso é a definição. MAs não é o que está declarando e só dificulta  a compreensão, em especial para quem está começando.

 

 

 

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

25 minutos atrás, arfneto disse:

 

Só precisa especificar a última dimensão, e só está conseguindo ver MAX porque é uma constante GLOBAL. E você está dizendo para não usar isso...

 

Em português o normal é procurar por algo em algum lugar, então o mais usual em português é

 

    int procura( char* nome, char lista[][30], size_t N);

 

Supondo que se possa assumir que lista tem strings terminadas por NULL de fato. Se não puder garantir isso precisa passar dois parâmetros com as dimensões, claro.

 

Note que uma declaração associa um nome a um tipo. nome é char*, lista é char[][30]. Procure declarar assim porque é a realidade. nome é char*, é o que está declarando. É claro que se nome é char* *nome é char, isso é a definição. MAs não é o que está declarando e só dificulta  a compreensão, em especial para quem está começando.

 

 

 

obrigado pela dica 

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

21 minutos atrás, Midori disse:

Falei variáveis globais e não constante

 

O define é uma constante global, @MidoriDeveria entrar na função como um argumento

@Íssa Tainnah poste o código completo. Use o ta botão code para separar o código do texto...

 

Use constantes. Nunca escreva um programa interativo. Veja esse exemplo

 

#include <stdio.h>
int main(void)
{
    const char* convidado[] =
    {
        "Convidado 031",
        "Convidado 001",
        "Convidado 121",
        "Convidado 100"        
    };

    unsigned n = sizeof(convidado) / sizeof (convidado[0]);

    printf("Sao %d convidados:\n", n);
    for( int i = 0; i<n ; i+=1)
        printf("    %s\n", convidado[i]);
    return 0;
}  

 

que mostra o óbvio

 

Sao 4 convidados:
    Convidado 031
    Convidado 001
    Convidado 121
    Convidado 100

 

Implemente a busca a partir disso e nunca perca tempo lendo dados.

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

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!