Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Angelripper

C Pesquisar um nome com array e fazer comparação

Recommended Posts

Boa noite, queria pedir a ajuda de vocês, pois estou fazendo um programa em c que simula cadastro de funcionários, e estou com muita dificuldade numa função que pesquisa o nome de um funcionário, eu informo um nome que esta cadastrado mas o programa não faz a devida comparação com o nome já armazenado, segue o código.

#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10

void inserir(char nome[10][50],int matricula[10], float salario[10], int *cont);
void listar(char nomes[10][50],int matriculas[10], float salarios[10], int *cont);
void excluir(char nome[10][50],int matricula[10], float salario[10], int *cont);
void pesquisar(char nome[10][50],int matricula[10], float salario[10], int *cont);
void ordenar(char nome[10][50],int matricula[10], float salario[10], int *cont);
void ler(char nome[10][50],int matricula[10], float salario[10], int *cont);
void escrever(char nome[10][50],int matricula[10], float salario[10], int *cont);

int main(){


    char nome[10][50];
    int matricula[10];
    float salario[10];
    char seguir='s';
    int opcao;
    int cont=0;
    
    ler(nome, matricula, salario, &cont);//Função para carregar os dados do arquivo, se ja existir.
    
          while(seguir =='s')
      {
          system("cls"); ///apagar tela
      printf("            [    Cadastro de Funcionarios    ]            \n\n");
      printf("1) NOVO CADASTRO \n");
      printf("2) REMOVER FUNCIONARIO\n");
      printf("3) LISTAR TODOS OS FUNCIONARIOS\n");
      printf("4) PESQUISAR \n");
      printf("0) SAIR ");
      printf("\n\n > > > Digite sua opcao: ");
      scanf("%d%*c",&opcao);
      printf("\n");
      
      system("cls");
      
      switch(opcao)
      {
            case 1:
             {
               printf("INSERINDO NOVO REGISTRO... \n\n");
               if(cont < MAX)
               {
                 inserir(nome, matricula, salario, &cont);
                 printf("DADOS INSERIDOS COM SUCESSO!!!\n\n");
               }
               else
               {
                 printf("O Sistema de Cadastro esta no limite!\n\n");
               }
               break;
             }
            case 2:
             {
               if(cont == 0)
               {
                 printf("não há dados para serem excluidos!\n\n");
               }
               else
               {
                 excluir(nome, matricula, salario, &cont);
               }
               break;
             }
               
            case 3:
             {
                 
               if(cont == 0)
               {
                 printf("não há dados no sistema! %d\n\n",cont);
               }
               else
               {
                 printf(" Listando os Funcionarios cadastrados...\n\n");
                 listar(nome, matricula, salario,&cont);
               }
               break;
             }
            case 4:
             {
               if(cont == 0)
               {
                 printf("não há dados no sistema!\n\n");
               }
             
               else
               {   
                 printf("PESQUISANDO DADO...\n\n");
                 pesquisar(nome, matricula, salario,&cont);
               }
                 break;
             }   
             case 0:
             {
                 printf ("SAIR\n");
                 system ("pause");
                 escrever(nome, matricula, salario, &cont);
                 return 0;
                 break;
             }
            default:
               printf(" ( OPCAO INVALIDA! )\n\n");
               break;
                                 
      }
      
      
      printf(" CONTINUAR?(S/N) ");
      scanf("%s",&seguir);
      }
      escrever(nome, matricula, salario, &cont);
      
      
    return 0;
}
void inserir(char nome[10][50],int matricula[10], float salario[10], int *cont)
{
    fflush(stdin);
    printf("Informe o nome do funcionario:\n");
    fgets(nome[*cont],50,stdin);
    fflush(stdin);
    printf("Digite o numero da matricula:\n");
    scanf("%d",&matricula[*cont]);
    fflush(stdin);
    printf("informe o salario:\n");
    scanf("%f",&salario[*cont]);
    fflush(stdin);
    
    *cont = *cont + 1;
    ordenar(nome, matricula, salario,cont);
  
}
void listar(char nomes[10][50],int matriculas[10], float salarios[10], int *cont)
{
     int i;
     
     for(i = 0;i < *cont; i++) /// listar usando vetores
     {
             
             printf ("\nNome: ");
             puts(nomes);
            printf("Matricula: %d",matriculas);
            printf("\nSalario: %.2f\n\n",salarios);
     }
}

void excluir(char nome[10][50],int matricula[10], float salario[10], int *cont)
{
    int i,j;
    int pesquisa;
    printf("Digite a Matricula do funcionario que deseja excluir\n");
    scanf("%d",&pesquisa);
    
    for(i=0;i<*cont;i++){
        if(pesquisa==matricula){
            for(j=i;j<((*cont)-1);j++){
                matricula[j] = matricula[j+1];
                strcpy(nome[j],nome[j+1]);
            }
            
        printf(" DADO EXCLUIDO COM SUCESSO!\n\n");
        
        *cont  = *cont - 1;     
        }
            printf("Matricula nao encontrada\n"); 
    }
    ordenar(nome, matricula, salario,cont);

}
void ordenar(char nome[10][50],int matricula[10], float salario[10], int *cont){
     int i,j,aux;
     float aux2;
     char temp[50];
     
     for(i = 1; i < *cont; i++){
         for (j = 0; j < (*cont)-1; j++){
                       
              if(strcmp(nome[j],nome[j+1]) > 0){
                strcpy(temp,nome[j]);
                 strcpy(nome[j],nome[j+1]);
                 strcpy(nome[j+1],temp);
                 
                 aux = matricula[j];
                 matricula[j] = matricula[j+1];
                 matricula[j+1] = aux;
                 
                 aux2 = salario[j];
                 salario[j]= salario[j+1];
                 salario[j+1] = aux2;
                 
                 }                                
           }     
         }
}
void pesquisar(char nome[10][50],int matricula[10], float salario[10], int *cont)
{
     int i,j, contador,pergunta;
     float dado;
     char dado2[50];
     printf("||||||| PESQUISA ||||||\n");
     printf("\nPor salario digite 1:\nPor Nome digite 2:\n");
     scanf("%d",&pergunta);
       if(pergunta == 1){
         printf("digite o salario que deseja pesquisar\n");
         scanf("%f", &dado);
           for(i = 0;i < *cont; i++)
     {
       if(dado == salario)
       {
          printf("Dado Encontrado \n\n");
          printf("Nome: %s",nome);
          printf("Matricula: %d\n",matricula);
          printf("Salario: %f",salario);           
          printf("\n");
          contador = contador + 1;
       } 
       
     }
     if(cont == 0)
     {
       printf(" Registro não Encontrado!\n\n");
   
     }
       }  
       if(pergunta == 2){
           printf("digite o nome que deseja persquisar\n");
        scanf("%s", &dado2[50]);
        //fflush(stdin);
        //fgets(dado2,50,stdin);
        //fflush(stdin);
        //printf ("%s", dado2);
        //s = strlen(dado2);
        char nm[50];
                           
     for(i = 0;i < *cont; i++)
     {
         
        if(dado2 == nome)
            printf ("[%s][%s]", nome, dado2);
       {
          printf("\nDado Encontrado \n\n");
          printf("NOME: %s",nome);
          printf("MATRICULA: %d\n",matricula);
          printf("SALARIO: %f",salario);           
          printf("\n");
          contador = contador + 1;
       }
         
     }
     if(cont == 0)
     {
       printf(" Registro não Encontrado!\n\n");
   
     }
}   
}
void ler (char nome[10][50],int matricula[10], float salario[10], int *cont) //função para criar o arquivo, e ler os dados 
{

    FILE *arquivo; //declarando apontador do tipo FILE que irá apontar para o arquivo desejado.
    int i;
    char aux[200];
    arquivo = fopen("dados.txt", "r");//Abre o aquivo no modo leitura.

    if(arquivo == NULL)
    {
        arquivo = fopen("dados.txt", "w");//Se não existir o arquivo, a função cria.
        fclose(arquivo);
    }
    else
    {
        fscanf(arquivo, "Pessoas cadastradas: %d\n", cont);
        for(i = 0; i < *cont; i++)
        {
            fgets(aux, 100, arquivo); //leitura de string 
            //strtok(aux, "\n"); //função pra retirar o \n que pura linha da string lida.
            strcpy(nome, aux); //copiando o aux pra posição do array de nomes.
            fscanf(arquivo, "Matricula: %d\n", &matricula);
            fscanf(arquivo, "Salario: %f\n\n", &salario);
        }
        fclose(arquivo);
    }
    return ;
}
void escrever (char nome[10][50],int matricula[10], float salario[10], int *cont) //função para escrever os dados no arquivo.
{

    FILE *arquivo;
    int i;

    arquivo = fopen("dados.txt", "w");

    if(arquivo == NULL) //Ele não conseguiu abrir o arquivo/criar.
    {
        printf("Erro. \n");
    }
    else
    {
        fprintf(arquivo, "Pessoas cadastradas: %d\n", *cont); //Escrevendo a quantidade no arquivo, para ser recuperado quando o programa for aberto novamente
        for(i = 0; i < *cont; i++)
        {
            fputs( nome, arquivo);
            fprintf(arquivo, "Matricula: %d\n", matricula);
            fprintf (arquivo, "Salario: %.2f\n\n", salario);
        }
        fclose(arquivo);
    }
    return ;
}

 

Editado por DiF
Inserir o código usando o botão CODE <>
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Para comparar dois nomes (2 strings), você pode usar a função strcmp(): http://www.cplusplus.com/reference/cstring/strcmp/

Tem outra maneira de comparar o nome, percorrendo ambos os vetores de char (strings), e comparando se são iguais.

Enfim, no lugar de comparar um nome assim:

if(dado2 == nome)

 

Você deve comparar assim:

if (strcmp(nome, dado2) == 0)

 

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
41 minutos atrás, CiroboyBR disse:

Para comparar dois nomes (2 strings), você pode usar a função strcmp(): http://www.cplusplus.com/reference/cstring/strcmp/

Tem outra maneira de comparar o nome, percorrendo ambos os vetores de char (strings), e comparando se são iguais.

Enfim, no lugar de comparar um nome assim:


if(dado2 == nome)

 

Você deve comparar assim:


if (strcmp(nome, dado2) == 0)

 

Fiz dessa forma que você falou, mas mesmo assim não esta dando certo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função que te informei não fez a comparação entre 2 strings?

 

                

Editado por DiF
Por favor, atente-se em ajudar os usuários. Se você ver um código sem a tag, peço a gentileza que denuncie.

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 hora atrás, CiroboyBR disse:

A função que te informei não fez a comparação entre 2 strings?

 

                

Citação

Bom, eu comparei da forma que você disse, mas mesmo assim quando eu busco um nome que foi cadastrado, ela ainda não acha o nome.



#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 10

void inserir(char nome[10][50],int matricula[10], float salario[10], int *cont);
void listar(char nomes[10][50],int matriculas[10], float salarios[10], int *cont);
void excluir(char nome[10][50],int matricula[10], float salario[10], int *cont);
void pesquisar(char nome[10][50],int matricula[10], float salario[10], int *cont);
void ordenar(char nome[10][50],int matricula[10], float salario[10], int *cont);
void ler(char nome[10][50],int matricula[10], float salario[10], int *cont);
void escrever(char nome[10][50],int matricula[10], float salario[10], int *cont);

int main(){


	char nome[10][50];
	int matricula[10];
	float salario[10];
	char seguir='s';
	int opcao;
	int cont=0;
	
	ler(nome, matricula, salario, &cont);//Função para carregar os dados do arquivo, se ja existir.
	
	      while(seguir =='s')
      {
      	system("cls"); ///apagar tela
      printf("			[	Cadastro de Funcionarios	]			\n\n");
      printf("1) NOVO CADASTRO \n");
      printf("2) REMOVER FUNCIONARIO\n");
      printf("3) LISTAR TODOS OS FUNCIONARIOS\n");
      printf("4) PESQUISAR \n");
      printf("0) SAIR ");
      printf("\n\n > > > Digite sua opcao: ");
      scanf("%d%*c",&opcao);
      printf("\n");
      
      system("cls");
      
      switch(opcao)
      {
			case 1:
             {
               printf("INSERINDO NOVO REGISTRO... \n\n");
               if(cont < MAX)
               {
                 inserir(nome, matricula, salario, &cont);
                 printf("DADOS INSERIDOS COM SUCESSO!!!\n\n");
			   }
               else
               {
                 printf("O Sistema de Cadastro esta no limite!\n\n");
               }
               break;
             }
			case 2:
             {
               if(cont == 0)
               {
                 printf("não há dados para serem excluidos!\n\n");
               }
               else
               {
                 excluir(nome, matricula, salario, &cont);
               }
               break;
             }
               
			case 3:
             {
             	
               if(cont == 0)
               {
                 printf("não há dados no sistema! %d\n\n",cont);
               }
               else
               {
                 printf(" Listando os Funcionarios cadastrados...\n\n");
                 listar(nome, matricula, salario,&cont);
               }
               break;
             }
			case 4:
             {
               if(cont == 0)
               {
                 printf("não há dados no sistema!\n\n");
               }
			 
               else
               {   
                 printf("PESQUISANDO DADO...\n\n");
                 pesquisar(nome, matricula, salario,&cont);
			   }
			     break;
			 }   
			 case 0:
			 {
			 	printf ("SAIR\n");
			 	system ("pause");
			 	escrever(nome, matricula, salario, &cont);
			 	return 0;
			 	break;
			 }
			default:
               printf(" ( OPCAO INVALIDA! )\n\n");
               break;
                                 
      }
      
      
      printf(" CONTINUAR?(S/N) ");
      scanf("%s",&seguir);
      }
      escrever(nome, matricula, salario, &cont);
      
      
	return 0;
}
void inserir(char nome[10][50],int matricula[10], float salario[10], int *cont)
{
	fflush(stdin);
	printf("Informe o nome do funcionario:\n");
	fgets(nome[*cont],50,stdin);
	fflush(stdin);
	printf("Digite o numero da matricula:\n");
	scanf("%d",&matricula[*cont]);
	fflush(stdin);
	printf("informe o salario:\n");
	scanf("%f",&salario[*cont]);
	fflush(stdin);
	
	*cont = *cont + 1;
	ordenar(nome, matricula, salario,cont);
  
}
void listar(char nomes[10][50],int matriculas[10], float salarios[10], int *cont)
{
     int i;
     
     for(i = 0;i < *cont; i++) /// listar usando vetores
     {
     		
     		printf ("\nNome: ");
     		puts(nomes[i]);
			printf("Matricula: %d",matriculas[i]);
			printf("\nSalario: %.2f\n\n",salarios[i]);
     }
}

void excluir(char nome[10][50],int matricula[10], float salario[10], int *cont)
{
	int i,j;
	int pesquisa;
	printf("Digite a Matricula do funcionario que deseja excluir\n");
	scanf("%d",&pesquisa);
	
	for(i=0;i<*cont;i++){
		if(pesquisa==matricula[i]){
			for(j=i;j<((*cont)-1);j++){
				matricula[j] = matricula[j+1];
				strcpy(nome[j],nome[j+1]);
			}
			
		printf(" DADO EXCLUIDO COM SUCESSO!\n\n");
		
		*cont  = *cont - 1;	 
		}
			printf("Matricula nao encontrada\n"); 
	}
	ordenar(nome, matricula, salario,cont);

}
void ordenar(char nome[10][50],int matricula[10], float salario[10], int *cont){
	 int i,j,aux;
	 float aux2;
	 char temp[50];
	 
	 for(i = 1; i < *cont; i++){
         for (j = 0; j < (*cont)-1; j++){
                       
              if(strcmp(nome[j],nome[j+1]) > 0){
                strcpy(temp,nome[j]);
                 strcpy(nome[j],nome[j+1]);
                 strcpy(nome[j+1],temp);
                 
				 aux = matricula[j];
                 matricula[j] = matricula[j+1];
                 matricula[j+1] = aux;
                 
                 aux2 = salario[j];
                 salario[j]= salario[j+1];
                 salario[j+1] = aux2;
                 
				 }                                
           }     
         }
}
void pesquisar(char nome[10][50],int matricula[10], float salario[10], int *cont)
{
     int i,j, contador,pergunta;
     float dado;
     char dado2[50];
     printf("||||||| PESQUISA ||||||\n");
     printf("\nPor salario digite 1:\nPor Nome digite 2:\n");
     scanf("%d",&pergunta);
       if(pergunta == 1){
		 printf("digite o salario que deseja pesquisar\n");
	     scanf("%f", &dado);
	       for(i = 0;i < *cont; i++)
     {
       if(dado == salario[i])
       {
          printf("Dado Encontrado \n\n");
          printf("Nome: %s",nome[i]);
          printf("Matricula: %d\n",matricula[i]);
          printf("Salario: %f",salario[i]);           
          printf("\n");
          contador = contador + 1;
	   } 
       
     }
     if(cont == 0)
     {
       printf(" Registro não Encontrado!\n\n");
   
     }
	   }  
	   if(pergunta == 2){
	   	printf("digite o nome que deseja persquisar\n");
		fflush(stdin);
		fgets(dado2,50,stdin);
		fflush(stdin);
		
		                   
     for(i = 0;i < *cont; i++)
     {
     	
        if (strcmp(nome, dado2) == 0)
       {
          printf("\nDado Encontrado \n\n");
          printf("NOME: %s",nome[i]);
          printf("MATRICULA: %d\n",matricula[i]);
          printf("SALARIO: %f",salario[i]);           
          printf("\n");
          contador = contador + 1;
	   }
		 
	 }
     if(cont == 0)
     {
       printf(" Registro não Encontrado!\n\n");
   
     }
}   
}
void ler (char nome[10][50],int matricula[10], float salario[10], int *cont) //função para criar o arquivo, e ler os dados 
{

	FILE *arquivo; //declarando apontador do tipo FILE que irá apontar para o arquivo desejado.
	int i;
	char aux[200];
	arquivo = fopen("dados.txt", "r");//Abre o aquivo no modo leitura.

	if(arquivo == NULL)
	{
		arquivo = fopen("dados.txt", "w");//Se não existir o arquivo, a função cria.
		fclose(arquivo);
	}
	else
	{
		fscanf(arquivo, "Pessoas cadastradas: %d\n", cont);
		for(i = 0; i < *cont; i++)
		{
			fgets(aux, 100, arquivo); //leitura de string 
			//strtok(aux, "\n"); //função pra retirar o \n que pura linha da string lida.
			strcpy(nome[i], aux); //copiando o aux pra posição do array de nomes.
			fscanf(arquivo, "Matricula: %d\n", &matricula[i]);
			fscanf(arquivo, "Salario: %f\n\n", &salario[i]);
		}
		fclose(arquivo);
	}
	return ;
}
void escrever (char nome[10][50],int matricula[10], float salario[10], int *cont) //função para escrever os dados no arquivo.
{

	FILE *arquivo;
	int i;

	arquivo = fopen("dados.txt", "w");

	if(arquivo == NULL) //Ele não conseguiu abrir o arquivo/criar.
	{
		printf("Erro. \n");
	}
	else
	{
		fprintf(arquivo, "Pessoas cadastradas: %d\n", *cont); //Escrevendo a quantidade no arquivo, para ser recuperado quando o programa for aberto novamente
		for(i = 0; i < *cont; i++)
		{
			fputs( nome[i], arquivo);
			fprintf(arquivo, "Matricula: %d\n", matricula[i]);
			fprintf (arquivo, "Salario: %.2f\n\n", salario[i]);
		}
		fclose(arquivo);
	}
	return ;
}

 

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
12 horas atrás, CiroboyBR disse:

Você está usando um vetor de strings:


  if (strcmp(nome[i], dado2) == 0)

 

Cara, muito obrigado, deu certo, já estava quase desistindo.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×