Ir ao conteúdo

C Pesquisar se o nome existe, usando struct


Ir à solução Resolvido por devair1010,

Posts recomendados

  • Solução
Postado

@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
Postado

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

 

Postado
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

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!