Ir ao conteúdo
  • Cadastre-se

C Pesquisar se o nome existe, usando struct


Ir à solução Resolvido por devair1010,

Posts recomendados

  • Solução

@Visitante05052      dentro de struct não precisa usar vetores ou matrizes , pois será criado esse vetor para a struct toda ,

#include <string.h>
typedef struct
{
    char nome[10][20];                                      // dentro da struct não precisa de usar 
                                                            // nem matriz nem vetor
    char name[30];                                          // poderia ser assim , uma string simples
    int idade;                                
}TFuncionario;
int main()                                                  // dentra da função int main
    TFuncionario f[100];                                    // um vetor para struct com 100 posições
    strcpy(f[0].nome[0],"qualquer um");                     // insere um nome 
    printf("nome do funcionario ");
    fgets(f[0].nome[0], 20,stdin);
    f[0].nome[0][strlen(f[0].nome[0]) - 1] = '\0';          // remover o newline pego pelo fgets
    if(strcmp(f[0].nome[0] , func ) == 0 )                  // compara e se for 0 as duas são iguais 
        printf("funcionario %s encontrado .",f[0].nome[0]); // escreve o nome

 

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

@Visitante05052    desculpe falha nossa ,   para comparar precisa pegar o nome e outra variável :

#define _CRT_SECURE_NO_WARNINGS
#include <string.h>
#include <stdio.h>
typedef struct
{
    char nome[10][20];                                         // dentro da struct não precisa usar 
                                                               // nem matriz nem vetor
    char name[30];                                             // poderia ser assim , uma string simples
    int idade;
    int contador;
}TFuncionario;
int main()                                                     // dentro da função int main
{
    TFuncionario f[100];                                       // um vetor para struct com 100 posições
    char func[30];                                             // string auxiliar 
    f[0].contador = 0;                                         // inicializa o contador de cadstros
    int cont = f[0].contador;                                  // cont é mais fácil de usar , pois tem poucas letras
                                                               // Aqui cadastrar um funcionario qute o nome "qualquer um"
    strcpy(f[cont].nome[0], "qualquer um");                    // insere um nome de funcionario , e quE é "qualquer um" , na variavel 
                                                               // vetor de string's nome que esta na struct
    cont++;                                                    // incrementa o contador de cadastros de funcionario
                                                               // cadastrar outro funcionario
    strcpy(f[cont].name , "algum nome");                       // insere um nAme , e Que é "algum nome" na struvt
    printf("nome do funcionario ");                            // usuario informa o nome para comparar
    fgets(func, 20, stdin);                                    // fgets pega tudo digitado e até o newline
    func[strlen(func) - 1] = '\0';                             // remover o newline pego pelo fgets , senao erro na comparação
    if (strcmp(f[0].nome[0], func) == 0)                       // strcmp compara string's e se for igual a 0 as duas são iguais 
        printf("\nfuncionario -> %s   encontrado .\n\n\n", 
                                            f[0].nome[0]);     // escreve o nome de funcionario Que esta na struct
    printf("outro nome de funcionario ");
    fgets(func, 30, stdin);                                    // pega outro nome
    func[strlen(func) - 1] = '\0';                             // remover o newline pego pelo fgets
    if (strcmp(f[1].name, func) == 0)                          // compara e se for 0 as duas são iguais 
        printf("\no outro funcionario -> %s    tambem foi encontrado .\n\n\n",
       f[1].name);                                             // escreve o nome
    return 0;                                                  // retorna para o Windows com valor zero
    // e usando uma fuyção para cadstRar seria bem melhor
    // e outra função pAra comparar ,  e que seria a função pesqUisar ou mesmo Listar
}

 

Link para o comentário
Compartilhar em outros sites

Em 06/08/2021 às 09:27, Visitante05052 disse:

Tenho que consultar funcionário pelo nome, uso struct, sei que tenho que validar o nome também, tem como ajudar?

 

Isso já foi marcado como resolvido, mas mesmo assim acho que cabe algum comentário ;) 

 

O que seria validar o nome também? Qual seria a ajuda esperada?

 

typedef struct{
    char nome[10][20];
    int idade;
}TFuncionario;

 

Está difícil de ler isso tudo grudado, mas entendo que um funcionário tem 10 nomes de até 19 letras, e uma idade só. Faz mesmo sentido?

 

Não seria o caso de ter um grupo de até 10 funcionários, cara um com seu nome e idade?

 

Compare
 

typedef struct
{
     int     idade;
     char    nome[20];

}    Funcionario;


typedef struct
{
    int         total;
    Funcionario f[10];

}   Pessoal;

 

Parece mais simples de entender e mais útil: um funcionário é um funcionário. Um grupo tem um certo número deles. E o grupo tem um contador DENTRO dele. Tudo fica mais fácil.

 

Exemplo usando recortar e colar ;)

 

O exemplo cria um grupo de 10 funcionários e preenche usando o simples: sprintf() numerando os nomes para poder testar, e colocando idades em sequencia. E depois mostra os grupos e como trocar um funcionário INTEIRO dentro do grupo, copiando todos os campos de uma vez.

 

#include <stdio.h>

typedef struct
{
     int     idade;
     char    nome[20];

}    Funcionario;


typedef struct
{
    int         total;
    Funcionario f[10];

}   Pessoal;


int main(void)
{
    // exemplos
    Pessoal grupo = { .total = 0 };
    Funcionario um = { 45, "James Bond" };

    printf("Grupo com %d funcionarios\n", grupo.total);

    // preenche o grupo com 10 nomes tipo "James Bond NN" e idade 14+NN
    // usa a variavel 'um' para preencher 'grupo'
    for (int n = 0; n<10; n += 1)
    {
        // nome 1 = 'James Bond  1' idade = 14
        // nome 2 = 'James Bond  2' idade = 15 ... etc
        sprintf( grupo.f[n].nome, "%s %d", "Jhonny Cash", 14+n);
        grupo.f[n].idade = 14+n;
        grupo.total +=1;
    }

    // agora mostra os caras
    printf("\nGrupo completo com %d funcionarios\n", grupo.total);
    for (int n = 0; n<grupo.total; n += 1)
    {
        printf( "%2d:\t%s,%d\n", 1+n, grupo.f[n].nome, grupo.f[n].idade );
    }

    // troca o nono funcionario
    grupo.f[8] = um;
    printf("\nTrocado um funcionario\n");
    for (int n = 0; n<grupo.total; n += 1)
    {
        printf( "%2d:\t%s,%d\n", 1+n, grupo.f[n].nome, grupo.f[n].idade );
    }

    return (0);
}

 

Que mostra

 

Grupo com 0 funcionarios

Grupo completo com 10 funcionarios
 1:     Jhonny Cash 14,14
 2:     Jhonny Cash 15,15
 3:     Jhonny Cash 16,16
 4:     Jhonny Cash 17,17
 5:     Jhonny Cash 18,18
 6:     Jhonny Cash 19,19
 7:     Jhonny Cash 20,20
 8:     Jhonny Cash 21,21
 9:     Jhonny Cash 22,22
10:     Jhonny Cash 23,23

Trocado um funcionario
 1:     Jhonny Cash 14,14
 2:     Jhonny Cash 15,15
 3:     Jhonny Cash 16,16
 4:     Jhonny Cash 17,17
 5:     Jhonny Cash 18,18
 6:     Jhonny Cash 19,19
 7:     Jhonny Cash 20,20
 8:     Jhonny Cash 21,21
 9:     James Bond,45
10:     Jhonny Cash 23,23

 

 

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

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

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!