Ir ao conteúdo
  • Cadastre-se
joaopcfb

C Função e pesquisa em struct

Recommended Posts

 

Minha professora me passou um código, mas não entendi muito bem algumas coisas. As partes que nao entendi estão em baixo de um comentário.

Como eu faria para pesquisar um carro pela faixa de preço?

Me perdoem se for uma solução *****. sou iniciante 😥

#include<stdio.h>
#include<stdlib.h>
#define vetcarros 20

int i;
int n_carros=0;
struct s_carros{
    char marca [15];
    int ano;
    char cor [10];
    float preco;
}carros[vetcarros];

	//------Duvida nesta funçao o que seria o 'carro' e como funciona a logica desta funçao--------//
void cadastrocarro(struct s_carros carro){
        carros[n_carros]=carro;
        n_carros++;
}

struct s_carros ledados(){
    struct s_carros auxiliar;
    printf("\n\nMarca do carro:");
    fflush(stdin);
    fgets(auxiliar.marca, 15 ,stdin);
    printf("Ano: ");
    fflush(stdin);
    scanf("%d", &auxiliar.ano);
    printf("cor: ");
    fflush(stdin);
    fgets(auxiliar.cor, 10, stdin);
    printf("preco: ");
    fflush(stdin);
    scanf("%f", &auxiliar.preco);
    return auxiliar;
};

void imprimeCarros(){
    for(i=0;i<n_carros;i++){
        printf("\nCarro numero %d", i);
        printf("\nMarca: %s", carros[i].marca);
        printf("\nAno: %d", carros[i].ano);
        printf("\nCor: %s", carros[i].cor);
        printf("\nPreço: %f", carros[i].preco);
        printf("\n\n<-------------------------------->");
    }
}

int menu(){
    int opcao;
    printf("\n1-inserir carro\n2-listar dados\n3-para sair");
    printf("Digite a opcao: ");
    scanf("%d", &opcao);
    return opcao;

}

void pesquisapreco(){

}

int main(){
    int opcaoselecionada;
  	//------Por que a struct foi declarada assim: 'struct s_carros novo_carro'? este 'novo_carro serve para que?  ----//
    struct s_carros novo_carro;
    int r;
    do{
        system("cls");
        opcaoselecionada=menu();
        switch(opcaoselecionada){
            case 1:
                if(n_carros == vetcarros){
                    printf("banco de dados lotado!");
                    break;
                }
                novo_carro = ledados();
                cadastrocarro(novo_carro);
                break;
            case 2:
                imprimeCarros();
                system("pause");
                break;
            case 3:
                break;
            default:
            printf("numero invalido!");
        }



    }while(opcaoselecionada!=3);
}

 

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

você teria 2 valores tipo valorminimo e valormaximo, ambos flotantes, dai é só comparar carro[X].preco com valorminimo, e valormaximo. tipo if ( carro[X].preco > valorminimo && carro[X].preco < valormaximo){imprimir carro[X].preco}. ponha esse if dentro de um for para comparar toda a lista de carros.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites

@joaopcfb      esse código usa a struct de uma forma mais complicada mas funciona , então modifiquei um pouco o código e acrescentei comentários sobre suas dúvidas .

#include<stdio.h>
#include<locale.h>
#include<string.h>
#include<stdlib.h>
#define vetcarros 20

int i;
int n_carros=0;
struct s_carros{
    char marca [15];
    int ano;
    char cor [10];
    float preco;
}carros[vetcarros];

	//------Duvida nesta funçao o que seria o 'carro' e como funciona a logica desta funçao--------/
	//------carro é a variável que será usada como referencia da struct s_carros ,/.:; 
void cadastrocarro(struct s_carros carro){
        carros[n_carros]=carro;
        n_carros++;
}

struct s_carros ledados(){
    struct s_carros auxiliar;
    printf("\n\nMarca do carro ---: ");
    fflush(stdin);
    fgets(auxiliar.marca, 15 ,stdin);
    
    /*printf("ultimo caractere = %c\n",auxiliar.marca[strlen(auxiliar.marca)-2]);*/
    /*if(auxiliar.marca[strlen(auxiliar.marca)-1]=='\n')printf("o final eh barra n .\n");*/
    auxiliar.marca[strlen(auxiliar.marca)-1]='\0';
    
    printf("Ano --------------: ");
    fflush(stdin);
    scanf("%d",&auxiliar.ano);
    printf("cor --------------: ");
    fflush(stdin);
    fgets(auxiliar.cor, 10, stdin);
    
    /*printf("ultimo caractere = %c\n",auxiliar.cor[strlen(auxiliar.cor)-2]);
    if(auxiliar.cor[strlen(auxiliar.cor)-1]=='\n')printf("o final de cor eh barra n .\n");*/
    auxiliar.cor[strlen(auxiliar.cor)-1]='\0';
    
    printf("preco ------------: ");
    fflush(stdin);
    scanf("%f",&auxiliar.preco);
    return auxiliar;
};

void imprimeCarros(){
    for(i=0;i<n_carros;i++){
        printf("\nCarro numero ---: %d",i+1);
        printf("\nMarca ----------: %s",carros[i].marca);
        printf("\nAno ------------: %d",carros[i].ano);
        printf("\nCor ------------: %s",carros[i].cor);
        printf("\nPreco ----------: %.2f",carros[i].preco);
        printf("\n\n<-------------------------------->\n");
    }
}

int menu(){
    int opcao;
    printf("\n1-inserir carro\n2-listar dados\n3-pesquisar por preco\n4-para sair\n\n");
    printf("Digite a opcao : ");
    scanf("%d",&opcao);
    return opcao;

}

void pesquisapreco(){
    float prc;
    int flag=0,X;
    printf("Digite O Preco Do Carro Para Pesquisar : ");
    scanf("%f",&prc);
    for(X=0;X<n_carros;X++)
        if(carros[X].preco == prc){
            printf("Este Carro -> %s <- Tem Esse Preco -> %.2f\n",
                    carros[X].marca,carros[X].preco);
            flag=1;
        }
        if(flag==0)printf("Nenhum Carro Com Esse Preco !\n");
}

int main(){
    int opcaoselecionada;
  	//------Por que a struct foi declarada assim: 'struct s_carros novo_carro'? este 'novo_carro serve para que?  ----//
  	//------novo_carro é a variável que será usada como referencia da struct s_carros , geralmente é usada como vetor 
    struct s_carros novo_carro;
    int r;
    do{
        system("cls");
        opcaoselecionada=menu();
        switch(opcaoselecionada){
            case 1:
                if(n_carros == vetcarros){
                    printf("banco de dados lotado!");
                    break;
                }
                novo_carro = ledados();
                cadastrocarro(novo_carro);
                break;
            case 2:
                imprimeCarros();
                system("pause");
                break;
            case 3:
                pesquisapreco();
                system("pause");
                break;
            default:
            printf("numero invalido!");
        }

    }while(opcaoselecionada != 4);
}

 

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

×