Ir ao conteúdo
  • Cadastre-se
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 ;
}

 

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

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

×