Ir ao conteúdo
  • Cadastre-se

C Consultar apenas um dado de uma struct


Visitante

Posts recomendados

Meu programa ficou assim, ele rodou até a consulta de todos os dados, mas pra fazer a consulta individual eu fiquei travada.

#include <stdio.h>
#include <locale.h> 
#include <stdlib.h>
#include <string.h>
struct compra{
    char nome[40];
    char produto[40];
    int quantidade;
    float valorProd;
    int contado;
    char formaPag[20];
} compraProg[80];

int indice=0;

void limpaBufferTechado();
void incluir();
void consultarTodos();
void consultarUm();

int main() {
    setlocale(LC_ALL, "Portuguese"); 
    char opcao;
    do {
        system("CLS");
         printf("Cadastro de Clientes\n");
      printf("I - Incluir novo cliente\n");
      printf("C - Consultar todos os clientes\n");
      printf("P - Consultar um cliente específico\n");
      printf("F - Fim do Programa\n");
      printf("\nDigite a opção desejada:");
      scanf("%c%*c", &opcao);
      switch(opcao) {
        case 'i':
        case 'I': incluir(); break;
        case 'c':
        case 'C': consultarTodos(); break;
        case 'p':
        case 'P': consultarUm(); break;
        case 'f':
        case 'F': printf("\nFim do programa"); break;
        default : printf("Opção Inválida!!\n");
      }
      printf("\nDigite <Enter> para continuar...");
      limpaBufferTechado();
      } while (opcao != 'f' && opcao != 'F');
        return 0;
    }
    void incluir()
{
    if(indice < 80)
    {
        printf("Digite o nome do cliente: ");
        gets(compraProg[indice].nome);  
        printf("Nome do produto comprado: ");
        gets(compraProg[indice].produto);
        printf("Quantidade de itens: ");  
        scanf("%i%*c", &compraProg[indice].quantidade);
        printf("Preço do produto: ");
        scanf("%f%*c", &compraProg[indice].valorProd);
        printf("Informe um número pra contado: ");
        scanf("%i%*c",&compraProg[indice].contado);
        printf("Forma de pagamento escolhida(A vista ou parcelado): ");
        gets (compraProg[indice].formaPag);
        indice++; 
    }
    else
    {
        printf("Espaço reservado cheio.\nNão é possível cadastrar novos clientes no momento.\n");
    }
}
//Permite a consulta dos registros da struct
void consultarTodos()
{
    if(indice==0)
        printf("\nNão existem clientes cadastrados no sistema da loja!!\n");
    else
    {
        int index;
        printf("\n\n**********Clientes Cadastrados************\n");
        for(index=0; index<indice; index++)
        {
            printf("\nNome do cliente: %s",compraProg[index].nome);  
            printf("\nNome do produto comprado: %s", compraProg[index].produto);   
            printf("\nQuantidade de itens comprados: %i", compraProg[index].quantidade);   
            printf("\nPreço do Produto:%4.2f%", compraProg[index].valorProd);
            printf("\nInforme um número para contado:%i",compraProg[index].contado);
            printf("\nForma de pagamento escolhida(A vista ou parcelado): %s",compraProg[index].formaPag);
        }
    }
}
void consultarUm()
{
    int i;
    char nomeProcurado;

    printf("\nDigite o nome do cliente: ");
    scanf("%s%*c", &nomeProcurado);
    for(i = 0; i<80;i++)
    {
    if(nomeProcurado == compraProg[i].nome)
        {
            printf("\nRegistro encontrado: ");
            printf("\nNome do cliente: %s",compraProg[i].nome);  
            printf("\nNome do produto comprado: %s", compraProg[i].produto);   
            printf("\nQuantidade de itens comprados: %i", compraProg[i].quantidade);   
            printf("\nPreço do Produto:%4.2f%", compraProg[i].valorProd);
            printf("\nInforme um número para contado:%i",compraProg[i].contado);
            printf("\nForma de pagamento escolhida(A vista ou parcelado): %s",compraProg[i].formaPag);    
    }
    else
    printf("Cliente não encontrado");
    }
}
//Função para limpar o buffer do teclado
void limpaBufferTechado()
{
    char ch;
    while ((ch = getchar()) != '\n' && ch != EOF);
}

Link para o comentário
Compartilhar em outros sites

@Helo03    Na função consultarUm  você está usando o símbolo de comparação de string da Linguagem c++ ,  pois na Linguagem  c  , como está nesse tópico ,  é a função  strcmp  ,  e para fazer a pesquisa ali creio que seja melhor usar uma variável para informar se encontrou ou não o nome pesquisado , e encontrando , já para de pesquisar  , pois do jeito que está , ele vai escrevendo aquela mensagem de que não encontrou , várias vezes ,  e então seu código com algumas modificações poderia ser assim  :

#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <ctype.h>
#include <locale.h>
#include <stdlib.h>
#include <string.h>
#define barra for(f=0;f<40;f++)printf("*");printf("\n");
struct compra
{
    char  nome[40];
    char  produto[40];
    int   quantidade;
    float valorProd;
    int   contado;
    char  formaPag[20];
} compraProg[80];
int indice;  //  aqui antes da main todas as variável são inicializadas com valor zero
void limpaBufferTeclado();
void incluir();
void consultarTodos();
void consultarUm();
int main()
{
    setlocale(LC_ALL, "Portuguese");
    int f;
    char opcao,abarra[30];
    do
    {
        system("cls"                                    );
        barra                                            ;
        printf("Menu De opções :\n"                     );
        printf("  I - Incluir novo cliente\n"           );
        printf("  C - Consultar todos os clientes\n"    );
        printf("  P - Consultar um cliente específico\n");
        printf("  F - Fim do Programa\n"                );
        printf("      Digite a opção desejada:\n\n"     );
        barra                                            ;
        opcao = toupper((char)getch()                   );
        printf("\n\n\a"                                 );
        switch(opcao)
        {
        case 'I':
            incluir();
            break;
        case 'C':
            consultarTodos();
            break;
        case 'P':
            consultarUm();
            break;
        case 'F':
            printf("\nFim do programa");
            break;
        default :
            printf("Opção Inválida!!\n");
        }
        printf("\nDigite <Enter> para continuar...");
        limpaBufferTeclado();
    }while( opcao != 'F' );
    return 512;
}
void incluir()
{
    if(indice < 80)
    {
        printf("Digite o nome do cliente ------: "   );
        gets(compraProg[indice].nome                 );
        printf("Nome do produto comprado ------: "   );
        gets(compraProg[indice].produto              );
        printf("Quantidade de itens -----------: "   );
        scanf("%i%*c", &compraProg[indice].quantidade);
        printf("Preço do produto --------------: "   );
        scanf("%f%*c", &compraProg[indice].valorProd );
        printf("Informe um número pra contado -: "   );
        scanf("%i%*c",&compraProg[indice].contado    );
        printf("Forma de pagamento escolhida\n"      );
        printf("A vista ou parcelado ----------: "   );
        gets (compraProg[indice].formaPag            );
        indice++;
    }
    else
    {
        printf("Espaço reservado cheio.\n");
        printf("Não é possível cadastrar novos clientes no momento.\n\n");
    }
}
//Permite a consulta dos registros da struct
void consultarTodos()
{
    if( indice == 0 )
        printf("\nNão existem clientes cadastrados no sistema da loja !!\n");
    else
    {
        int index;
        printf("\n\n**********Clientes Cadastrados************\n\n"                          );
        for(index=0; index<indice; index++)
        {
            printf("Nome do cliente ----------------: %s\n"    , compraProg[index].nome      );
            printf("Nome do produto comprado -------: %s\n"    , compraProg[index].produto   );
            printf("Quantidade de itens comprados --: %i\n"    , compraProg[index].quantidade);
            printf("Preço do Produto ---------------: %4.2f%\n", compraProg[index].valorProd );
            printf("Informe um número para contado -: %i\n"    , compraProg[index].contado   );
            printf("Forma de pagamento escolhida\n"                                          );
            printf("A vista ou parcelado -----------: %s\n\n"  , compraProg[index].formaPag  );
        }
    }
}
void consultarUm()
{
    int i,flag = 0;
    char nomeProcurado[30];
    printf("Digite o nome do cliente: ");
    scanf("%s%*c", &nomeProcurado);
    for(i = 0; i<80;i++)
    {
        if(strcmp(nomeProcurado,compraProg[i].nome) == 0)
        {
            flag = 1;
            break;
        }
    }
    if( flag )
    {
        printf("\nRegistro encontrado :\n\n"                                                             );
        printf("Nome do cliente ------------------------------------: %s\n"    , compraProg[i].nome      );
        printf("Nome do produto comprado ---------------------------: %s\n"    , compraProg[i].produto   );
        printf("Quantidade de itens comprados ----------------------: %i\n"    , compraProg[i].quantidade);
        printf("Preço do Produto -----------------------------------: %4.2f%\n", compraProg[i].valorProd );
        printf("Informe um número para contado ---------------------: %i\n"    , compraProg[i].contado   );
        printf("Forma de pagamento escolhida(A vista ou parcelado) -: %s\n\n"  , compraProg[i].formaPag  );
    }
    else
        printf("Cliente não encontrado"                                                                  );
}
//Função para limpar o buffer do teclado
void limpaBufferTeclado()
{
    char ch;
    while ((ch = getchar()) != '\n' && ch != EOF);
}

 

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

1 hora atrás, mauro_b disse:

Qual motivo essa reação?@KXSY 

Agora eu percebi que as palavras ficaram meio fora de ordem.

Eu achei engraçado, porque pareceu meio poético.

na realidade não só poético, mas que saiu de um livro (mais precisamente do livro The zen of seeing).

 

como essa frase "Aprendi que aquilo que não desenhei nunca de fato vi, e que quando começo a desenhar algo corriqueiro, me dou conta do seu teor extraordinário, milagre puro"

Do mesmo autor do livro citado acima.

  • Curtir 1
  • 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...