Ir para conteúdo
Fórum Script Brasil
  • 0

Ponteiro para vetor de struct


BRUNO_ALEX

Pergunta

Boa tarde pessoal estou com um problema.

Tenho o seguinte exercício e o professor me pede para modifica-lo para usar ponteiros na leitura e apresentação

dos dados dos vetores só que não tenho nem idéia de resolver isso. Segue o exercício:

#include <stdio.h>

struct Carro {
   char marca[15];
   int ano;
   char cor[10];
   float preço;
};

struct Carro carro[2];

void main() {

void preencheVetor();
void pesquisarPorPreco();
void pesquisarPorMarca();
void pesquisaAvancada();

int operacao;

   do {
      system ("CLS");
      printf ("Entre com a opcao:\n");
      printf ("1- Preencher lista de Carros\n");
      printf ("2- Pesquisar por preço\n");
      printf ("3- Pesquisar por marca\n");
      printf ("4- Pesquisa avancada\n");
      printf ("0- Sair\n");

      scanf ("%d", &operacao);

      switch (operacao){
         case 1: preencheVetor();
         break;
         case 2: pesquisarPorPreco();
         break;
         case 3: pesquisarPorMarca();
         break;
         case 4: pesquisaAvancada();
         break;
      }

      if ((operacao != 1) && (operacao != 2) && (operacao != 3) && (operacao != 4) && (operacao != 0)) {
         printf ("\nOperacao invalida!!!");
         system ("CLS");
      }

   } while (operacao != 0);

}

void preencheVetor(){
   system ("CLS");
   int i;

   for (i = 0; i < 2; i++) {
       printf ("\nMarca: ");
       scanf ("%s", &carro[i].marca);

       printf ("Ano: ");
       scanf("%d", &carro[i].ano);

       printf ("Cor: ");
       scanf ("%s", &carro[i].cor);

       printf ("preço: ");
       scanf ("%f", &carro[i].preço);
   }
   system ("CLS");
}

//pesquisarPorPreco
void pesquisarPorPreco() {
     system ("CLS");
     int i;
     short flag = 0;
     float preço;

     printf ("Digite o preço do carro: ");
     scanf ("%f", &preço);

     for (i = 0; i < 2; i++) {
         if (carro[i].preço == preço) {
            system ("CLS");
            printf ("preço escolhido: %.2f\n\n", preço);
            flag = 1;
            printf ("Marca: %s\n", carro[i].marca);
            printf ("Ano: %d\n", carro[i].ano);
            printf ("Cor: %s\n", carro[i].cor);
         }
     }

     if (flag == 0)
         printf ("não existem carros com esse valor!!!\n");

     system ("PAUSE");
}

//pesquisarPorMarca
void pesquisarPorMarca(){
     system ("CLS");
     int i;
     char marca[15];
     short int flag = 0;

     printf ("Digite a marca: ");
     fflush (stdin);
     gets (marca);

     for (i = 0; i < 2; i++) {
         if (strcmp(carro[i].marca, marca) == 0){
            system ("CLS");
            flag = 1;
            printf ("Marca escolhida: %s\n\n", marca);
            printf ("Ano: %d\n", carro[i].ano);
            printf ("Cor: %s\n", carro[i].cor);
            printf ("preço: %.2f\n", carro[i].preço);
         }
     }
     if (flag == 0)
         printf ("não existem carros com essa marca\n");

         system ("PAUSE");
}

//pesquisaAvancada
void pesquisaAvancada(){
     system ("CLS");
     int i;
     short int flag = 0;
     char marca[15];
     int ano;
     char cor[10];

     printf ("Marca: ");
     fflush (stdin);
     gets (marca);

     printf ("Ano: ");
     scanf ("%d", &ano);

     printf ("Cor: ");
     fflush (stdin);
     gets (cor);

     for (i = 0; i < 2; i++){
         if (strcmp(carro[i].marca,  marca) == 0 && carro[i].ano == ano && strcmp(carro[i].cor, cor) == 0)
            flag = 1;
     }

     if (flag == 1) {
          system ("CLS");
          printf ("Existe carro(s) com essa(s) caracteristica(s)\n");

          for (i = 0; i < 3; i++) {
              if (strcmp(carro[i].marca, marca) == 0 && carro[i].ano == ano && strcmp(carro[i].cor, cor) == 0) {
                 printf ("preço: %.2f\n", carro[i].preço);
              }
          }
     }
     else {
         printf ("não existe nenhum carro com estas caracteristicas\n");
     }
     system ("PAUSE");
}

Se alguém puder me dar uma força agradeço.

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Vou ser sincero que não entendi exatamente a questão, mas se for só pra ter ponteiros no programa, em vez de declarar assim:

void preencheVetor();
Troque por:
void preencheVetor(Carro *car);
e no corpo da função:
void preencheVetor(Carro *car){
   system ("CLS");
   int i;

   for (i = 0; i < 2; i++) {
       printf ("\nMarca: ");
       scanf ("%s", &car[i].marca);

       printf ("Ano: ");
       scanf("%d", &car[i].ano);

       printf ("Cor: ");
       scanf ("%s", &car[i].cor);

       printf ("preço: ");
       scanf ("%f", &car[i].preço);
   }
   system ("CLS");
}

E então você preencheu o vetor de carros usando um ponteiro para ele ( car )... é só seguir essa lógica para os outros e não se esqueça de quando for chamar a função tem que chamar com os parâmetros agora.

Carros carros[2] não precisa mais ser global se todas as funções que manipulam suas variáveis receberem como parâmetro um ponteiro para ele.

Link para o comentário
Compartilhar em outros sites

  • 0

Verdade, eu também esqueci em minha resposta, mesmo sem struct aqui funcionou pois meu compilador compilou em C++, onde não é preciso colocar o struct na frente nesse caso. Em C é obrigatório.

Editado por Myho
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...